Rei*_*ica 32 python python-3.x
__qualname__python中有什么,它有什么用?
为什么我需要使用它__name__?
我阅读了文档,但它们并没有帮助我清楚地了解它的用处。
我已阅读获取 Python 类的完全限定名称 (Python 3.3+)。
这个问题问的是“如何获得一个合格的名字”,它假定人们知道“合格的名字”的含义。显然,该问题的答案是使用__qualname__属性。
我的问题是什么 __qualname__,为什么我应该在__name__.
Mat*_*lin 52
__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'
Run Code Online (Sandbox Code Playgroud)
__qualname__还增加了一些与 Python 2 的.im_class.
小智 13
只是为了(可能)添加到前面的答案,__qualname__也可以从类内部调用,而不必绑定到任何方法。当您没有__init__定义方法时,这允许从类内部获取类的名称:
class myClass:
print(__qualname__)
Run Code Online (Sandbox Code Playgroud)
这将返回:
myClass
Run Code Online (Sandbox Code Playgroud)
我发现这很有用的一个实际场景是使用logging. 如果要在具有类的模块中实现它,如前所述,该类没有__init__方法,即仅包含类方法,然后将类的名称添加到logging需要加入日志的点符号路径由不同的模块生成到一个单一的,__qualname__似乎是一个简单的解决方案。