gpt4 book ai didi

python - 为什么当 type(n).__name__ 工作时 n.__name__ 是一个属性错误?

转载 作者:太空狗 更新时间:2023-10-30 02:16:16 25 4
gpt4 key购买 nike

n = 20
print n.__name__

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

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

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

最佳答案

__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,所以在访问时绑定(bind)到int类在 int 上):

>>> type(int)
<type 'type'>
>>> type.__dict__['__name__']
<attribute '__name__' of 'type' objects>
>>> type.__dict__['__name__'].__get__(int)
'int'

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

元类的属性在类的实例上不可用。

关于python - 为什么当 type(n).__name__ 工作时 n.__name__ 是一个属性错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45064509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com