[英]What is __qualname__ in python?
__qualname__
中的 __qualname__ 是什么,它有什么用处?
为什么我需要在__name__
上使用它?
我阅读了文档,但它们并没有帮助我清楚地了解它的用处。
我已阅读Get fully qualified name of a Python class (Python 3.3+) 。
该问题询问“如何获得限定名” ,这假定人们知道“限定名”的含义。 显然,该问题的答案是使用__qualname__
属性。
我的问题是__qualname__
是什么,为什么我应该在__name__
上使用它。
__qualname__
提供了比__name__
更完整的信息,因此在调试时更有帮助。
例子:
>>> def f(): pass
... class A:
... def f(self): pass
... class A:
... def f(self): pass
...
>>> # __name__ is not showing the path, so these functions look equal
>>> f.__name__
'f'
>>> A.f.__name__
'f'
>>> A.A.f.__name__
'f'
>>> # And these classes looks equal
>>> A.__name__
'A'
>>> A.A.__name__
'A'
>>>
>>> # __qualname__ shows the path, so these functions are distinguishable
>>> f.__qualname__
'f'
>>> A.f.__qualname__
'A.f'
>>> A.A.f.__qualname__
'A.A.f'
>>> # And these classes are distinguishable
>>> A.__qualname__
'A'
>>> A.A.__qualname__
'A.A'
__qualname__
还为 Python 2 的.im_class
添加了一些向后兼容性。
只是为了(可能)添加到前面的答案,也可以从__qualname__
内部调用 __qualname__,而不必绑定到任何方法。 当您没有定义__init__
方法时,这允许从 class 内部获取类的名称:
class myClass:
print(__qualname__)
这将返回:
myClass
我发现这很有用的一个实际场景是使用logging
。 如果您想在具有 class 的模块中实现它,如前所述,它没有__init__
方法,即仅包含 class 方法,然后将类的名称添加到logging
所需的点符号路径将不同模块生成的日志合并为一个, __qualname__
似乎是一个简单的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.