获取Python类的完全限定名称(Python 3.3+)

12

如何从模块根目录获取类名,包括完整路径?针对 Python 3.3 及以上版本。

以下是 Python 代码示例:

class A:
    class B:
        class C:
            def me(self):
                print(self.__module__)
                print(type(self).__name__)
                print(repr(self))

x = A.B.C()
x.me()

这段代码在 Python 3.3 上输出了我:

__main__
C
<__main__.A.B.C object at 0x0000000002A47278>

因此,Python内部知道我的对象是__main__.A.B.C,但是我如何以编程方式获取它?我可以解析repr(self),但对我来说这听起来像一个hack。


1
可能是 https://dev59.com/LXM_5IYBdhLWcg3wXyHZ 的重复问题,请查看该链接以获取使用信息,包括 __bases__ 属性和 inspect 模块提供的方法解析顺序(mro)也是有趣的信息,除了正式继承链“显示”之外。因为这决定了哪个方法(如果提供多个)将被选择,就像有效层次结构一样。 - Dilettant
1
检查 __qualname__ 属性。 - Ashwini Chaudhary
1个回答

13
你正在寻找 __qualname__(在Python 3.3中引入):
class A:
    class B:
        class C:
            def me(self):
                print(self.__module__)
                print(type(self).__name__)
                print(type(self).__qualname__)
                print(repr(self))

糟糕,我已经查找了这个属性并尝试在IPython中查找它,但是Tab键自动补全根本没有显示出来。不确定为什么。 - bialix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接