File tree Expand file tree Collapse file tree 5 files changed +21
-2
lines changed Expand file tree Collapse file tree 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)
463463
464464// Equivalent to obj.__class__.__name__ (or obj.__name__ if obj is a class).
465465inline const char *obj_class_name(PyObject *obj) {
466- if (Py_TYPE (obj) == &PyType_Type ) {
466+ if (PyType_Check (obj)) {
467467 return reinterpret_cast <PyTypeObject *>(obj)->tp_name ;
468468 }
469469 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) {
5555} // namespace test_class
5656
5757TEST_SUBMODULE (class_, m) {
58+ m.def (" obj_class_name" , [](py::handle obj) { return py::detail::obj_class_name (obj.ptr ()); });
59+
5860 // test_instance
5961 struct NoConstructor {
6062 NoConstructor () = default ;
Original file line number Diff line number Diff line change 11import pytest
22
3- import env # noqa: F401
3+ import env
44from pybind11_tests import ConstructorStats , UserType
55from pybind11_tests import class_ as m
66
77
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+
817def test_repr ():
918 assert "pybind11_type" in repr (type (UserType ))
1019 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) {
9999} // namespace handle_from_move_only_type_with_operator_PyObject
100100
101101TEST_SUBMODULE (pytypes, m) {
102+ m.def (" obj_class_name" , [](py::handle obj) { return py::detail::obj_class_name (obj.ptr ()); });
103+
102104 handle_from_move_only_type_with_operator_PyObject::m_defs (m);
103105
104106 // test_bool
Original file line number Diff line number Diff line change 99from pybind11_tests import pytypes as m
1010
1111
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+
1218def test_handle_from_move_only_type_with_operator_PyObject (): # noqa: N802
1319 assert m .handle_from_move_only_type_with_operator_PyObject_ncnst ()
1420 assert m .handle_from_move_only_type_with_operator_PyObject_const ()
You can’t perform that action at this time.
0 commit comments