当类型(n).__ name__有效时,为什么n .__ name__属性错误?

时间:2017-07-12 17:51:05

标签: python class attributes instance

n = 20
print n.__name__

我收到错误,因为n没有属性__name__

AttributeError: 'int' object has no attribute '__name__'

但是nint类的一个实例,而int.__name__给出了结果,那么为什么n.__name__会抛出错误。我期望因为n是类int的实例,所以它应该可以访问该类的所有属性。

1 个答案:

答案 0 :(得分:7)

__name__不是int类(或其任何基类)的属性:

>>> int.__dict__['__name__']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '__name__'
>>> int.__mro__
(<class 'int'>, <class 'object'>)
>>> object.__dict__['__name__']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '__name__'

它是元类的一个属性,type(它是descriptor,因此在{{1}上访问时绑定到int类}}):

int

就像实例上的属性查找也可以查看类一样,类上的属性查找会查找元类的属性。

类的实例上没有元类的属性。