python对象的__dict__属性

2019年10月31日 / 3次阅读 / Last Modified 2019年10月31日

在python中,一切都是对象,就连class定义本身,也是一个对象。

有的python对象存在__dict__属性,主要是自定义的class和对应生成的object,用__dict__记录了的属性字典。

>>> class testdict():
...     cls = 0
...     def __init__(self, value):
...         self.value = value
...
>>> testdict.__dict__
mappingproxy({'__module__': '__main__', 'cls': 0, '__init__': , '__dict__': , '__weakref__': , '__doc__': None})
>>> t = testdict(123)
>>> t.__dict__
{'value': 123}

定义一个testdict类,定义写完,这个定义就成了一个对象,访问其__dict__属性,可以看到很多,请关注那个名叫cls的类变量(class variable),它的值为0,与定义一致。

然后,代码创建了一个testdict的对象t,访问这个这个对象t的__dict__属性,只有一个属性value。

>>> t.cls = 321
>>> t.__dict__
{'value': 123, 'cls': 321}
>>> testdict.__dict__
mappingproxy({'__module__': '__main__', 'cls': 0, '__init__': , '__dict__': , '__weakref__': , '__doc__': None})

给对象t增加一个属性,也叫cls,值为321。然后再看类testdict的__dict__,类的cls值还是0。符合预取,因为这是两个不同的变量,一个属于对象t,一个属于类testdict。而__dict__可以清晰的反应这一点。

反过来,如果我们改变类变量的cls值,并不会影响对象中的cls值:

>>> t.__dict__
{'value': 123, 'cls': 321}
>>> testdict.cls = 999
>>> t.__dict__
{'value': 123, 'cls': 321}
>>> testdict.__dict__
mappingproxy({'__module__': '__main__', 'cls': 999, '__init__': , '__dict__': , '__weakref__': , '__doc__': None})

对象t的cls值,依然是321,修改的只是类testdict中的cls。

-- EOF --

本文链接:https://www.pynote.net/archives/1414

相关文章

    留言区

    电子邮件地址不会被公开。 必填项已用*标注


    前一篇:
    后一篇:

    More

    麦新杰的Python笔记

    Ctrl+D 收藏本页


    ©Copyright 麦新杰 Since 2019 Python笔记

    go to top