File tree 5 files changed +21
-2
lines changed
5 files changed +21
-2
lines changed Original file line number Diff line number Diff line change @@ -463,7 +463,7 @@ PYBIND11_NAMESPACE_BEGIN(detail)
463
463
464
464
// Equivalent to obj.__class__.__name__ (or obj.__name__ if obj is a class).
465
465
inline const char *obj_class_name(PyObject *obj) {
466
- if (Py_TYPE (obj) == &PyType_Type ) {
466
+ if (PyType_Check (obj)) {
467
467
return reinterpret_cast <PyTypeObject *>(obj)->tp_name ;
468
468
}
469
469
return Py_TYPE (obj)->tp_name ;
Original file line number Diff line number Diff line change @@ -55,6 +55,8 @@ void bind_empty0(py::module_ &m) {
55
55
} // namespace test_class
56
56
57
57
TEST_SUBMODULE (class_, m) {
58
+ m.def (" obj_class_name" , [](py::handle obj) { return py::detail::obj_class_name (obj.ptr ()); });
59
+
58
60
// test_instance
59
61
struct NoConstructor {
60
62
NoConstructor () = default ;
Original file line number Diff line number Diff line change 1
1
import pytest
2
2
3
- import env # noqa: F401
3
+ import env
4
4
from pybind11_tests import ConstructorStats , UserType
5
5
from pybind11_tests import class_ as m
6
6
7
7
8
+ def test_obj_class_name ():
9
+ if env .PYPY :
10
+ expected_name = "UserType"
11
+ else :
12
+ expected_name = "pybind11_tests.UserType"
13
+ assert m .obj_class_name (UserType (1 )) == expected_name
14
+ assert m .obj_class_name (UserType ) == expected_name
15
+
16
+
8
17
def test_repr ():
9
18
assert "pybind11_type" in repr (type (UserType ))
10
19
assert "UserType" in repr (UserType )
Original file line number Diff line number Diff line change @@ -99,6 +99,8 @@ void m_defs(py::module_ &m) {
99
99
} // namespace handle_from_move_only_type_with_operator_PyObject
100
100
101
101
TEST_SUBMODULE (pytypes, m) {
102
+ m.def (" obj_class_name" , [](py::handle obj) { return py::detail::obj_class_name (obj.ptr ()); });
103
+
102
104
handle_from_move_only_type_with_operator_PyObject::m_defs (m);
103
105
104
106
// test_bool
Original file line number Diff line number Diff line change 9
9
from pybind11_tests import pytypes as m
10
10
11
11
12
+ def test_obj_class_name ():
13
+ assert m .obj_class_name (None ) == "NoneType"
14
+ assert m .obj_class_name (list ) == "list"
15
+ assert m .obj_class_name ([]) == "list"
16
+
17
+
12
18
def test_handle_from_move_only_type_with_operator_PyObject (): # noqa: N802
13
19
assert m .handle_from_move_only_type_with_operator_PyObject_ncnst ()
14
20
assert m .handle_from_move_only_type_with_operator_PyObject_const ()
You can’t perform that action at this time.
0 commit comments