The __qualname__
attribute is useful to me because it contextualizes functions; however, it's difficult for me to use for my use case because:
__qualname__
returns a string. For my usecase, I need references to the parent object(s).__qualname__
sometimes returns thesuper
class instead of the referenced class. For example:class Parent(): def __init__(self): pass class Child(Parent): pass print(Child.__init__.__qualname__) # Prints: "Parent.__init__"
The package I am developing needs to be robust, and the edge cases for
__qualname__
are not documented as far as I can tell.
Outside of parsing the Python file with ast
, can __qualname__
be reimplemented in Python3 with inspection? How does Python implement __qualname__
? In reimplementing the core functionality, I think I'll be able to adapt it for my use case.
Prior Research:
- PEP 3155: https://www.python.org/dev/peps/pep-3155/
- Python 2
qualname
implementation: https://github.com/wbolster/qualname/blob/master/qualname.py - Parsing
__qualname__
to get references: Get defining class of unbound method object in Python 3 - Python 2
__qualname__
stackoverflow: Reproduce effects of Python 3.3 __qualname__ in earlier Pythons
I was unable to find the qualname implementation in the Python source code.