所有对象都具有__qualname__属性吗?

时间:2019-02-25 07:04:31

标签: python pandas introspection

遇到pandas.core.indexing._iLocIndexer错误时,我正在对熊猫对象进行自省。

docs说:

  

definition.__qualname__

     

类,函数,方法,描述符或   生成器实例。

我想知道是否所有对象都具有__qualname__(假设Python 3.3+),如果没有,这些对象是什么。

1 个答案:

答案 0 :(得分:0)

根据 PEP3155 __qualname__ 是在 classfunction 对象上引入的。

现在,我们需要记住,在 Python 中一切都是一个对象。函数是对象。类是对象!这里我们并不是说“类的实例”是对象,而是类本身就是对象。

示例:

>>> class C:
...     def __init__(self, a): self.a = a
...
>>> c = C(2)
>>> type(c)
<class '__main__.C'>
>>> hasattr(c, '__qualname__')
False
>>> hasattr(C, '__qualname__')
True
>>> C.__qualname__
'C'

所以类 C__qualname__ 但这个类的实例没有它。您可以使用间接方式检索它,但是:c.__class__.__qualname__ (small c)

函数类似:

>>> def f(b): print(b)
...
>>> hasattr(f, '__qualname__')
True
>>> f.__qualname__
'f'

如果嵌套类和函数,它们的 __qualname__ 将指示此定义层次结构。见What is qualname