n = 20
print n.__name__
我收到错误,因为n
没有属性__name__
:
AttributeError: 'int' object has no attribute '__name__'
但是n
是int
类的一个实例,而int.__name__
给出了结果,那么为什么n.__name__
会抛出错误。我期望因为n
是类int
的实例,所以它应该可以访问该类的所有属性。
答案 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
就像实例上的属性查找也可以查看类一样,类上的属性查找会查找元类的属性。
类的实例上没有元类的属性。