获取 Python 类的完全限定名称(Python 3.3+)
Posted
技术标签:
【中文标题】获取 Python 类的完全限定名称(Python 3.3+)【英文标题】:Get fully qualified name of a Python class (Python 3.3+) 【发布时间】:2016-09-30 18:57:41 【问题描述】:如何从模块根目录获取包含完整路径的类名称?对于 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。
【问题讨论】:
***.com/questions/1401661/… 的可能重复请通过__bases__
属性和inspect
module 提供的使用信息在此处查找方法解析顺序(mro
)除了正式继承链之外也是有趣的信息“展示”。因为这个规则(如果提供多个方法)将被选择,就像一个有效的层次结构。
检查__qualname__
属性。
【参考方案1】:
您正在寻找__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 找到它,但制表符完成根本没有显示它。不知道为什么。以上是关于获取 Python 类的完全限定名称(Python 3.3+)的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 JDK 类中使用完全限定名称声明 Serializable?