diff --git a/src/object/class.cpp b/src/object/class.cpp index 8778b7ab..5b509515 100644 --- a/src/object/class.cpp +++ b/src/object/class.cpp @@ -502,6 +502,16 @@ namespace objects ); } + str qualname(const char *name) + { +#if PY_VERSION_HEX >= 0x03030000 + if (PyObject_HasAttrString(scope().ptr(), "__qualname__")) { + return str("%s.%s" % make_tuple(scope().attr("__qualname__"), name)); + } +#endif + return str(name); + } + namespace { // Find a registered class object corresponding to id. Return a @@ -564,6 +574,9 @@ namespace objects object m = module_prefix(); if (m) d["__module__"] = m; +#if PY_VERSION_HEX >= 0x03030000 + d["__qualname__"] = qualname(name); +#endif if (doc != 0) d["__doc__"] = doc; diff --git a/test/nested.py b/test/nested.py index 72079017..56f81e52 100644 --- a/test/nested.py +++ b/test/nested.py @@ -14,7 +14,7 @@ 'X' >>> X.Y - + >>> X.Y.__module__ 'nested_ext'