1.0 Test.myVersion="2.0" Test-6ren">
gpt4 book ai didi

python - 为什么实例没有属性?

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

class Test():    
myVersion="1.0"
t=Test()
t.myVersion
--> 1.0

Test.myVersion="2.0"
Test.x={'myVersion':'1.0'}
Test.x
--> {'myVersion': '1.0'}

t.x
--> {'myVersion': '1.0'}

del t.x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Test instance has no attribute 'x'

为什么实例t没有属性x
{'myVersion': '1.0'}是不是归属地?

最佳答案

在 Python 中,classinstance 属性都可以从实例访问。

http://docs.python.org/2/reference/datamodel.html 中引用 类实例阐明这是如何工作的-

A class instance is created by calling a class object (see above). A class instance has a namespace implemented as a dictionary which is the first place in which attribute references are searched. When an attribute is not found there, and the instance’s class has an attribute by that name, the search continues with the class attributes.

您可以分别使用 Test.__dict__t.__dict__ 查看您的类和实例的命名空间。

有趣的是,如果您通过从实例中引用它来修改类属性,类属性将保持不受影响。相反,具有更改的属性的副本将添加到实例的命名空间。

例如,

>>> t = Test()  
>>> t.myVersion = "2.0"
>>> Test.__dict__
{'__module__': '__main__', 'myversion': '1.0', '__doc__': None}
>>> t.__dict__
{'myVersion': '2.0'}

myVersion 属性现在出现在 Test(类)和 t(实例)的命名空间中,并且可以安全地从中删除要么不引发 AttributeError

基本思想是您尝试从对象中删除的变量应该存在于它的命名空间中。

关于python - 为什么实例没有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14423143/

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