class test1(object):
def __init__(self):
self.a = 1
self.b = 2
test1 是个简单的类,我们先初始化这个类,然后用一个字典给类的实例赋值,会发现一些有趣的地方
In [12]: x.__dict__
Out[12]: {'a': 1, 'b': 2}
In [13]: x.__dict__ = {'a':3, 'c':4}
In [14]: x
Out[14]: <__main__.test1 at 0xaf29080>
In [15]: x.__dict__
Out[15]: {'a': 3, 'c': 4}
In [16]: x.c
Out[16]: 4
In [17]: x.__dict__ = {'a':3, 'c':4, 'b':5}
In [18]: x.__dict__
Out[18]: {'a': 3, 'b': 5, 'c': 4}
从 In[13] 可以发现原来类的属性里面没有定义 self.c , 但是经过赋值,实例 x 就有了 x.c 属性, 但是 x.b 却消失了。从接下来的 [17], [18] 可以看出来 实例的属性会被重新赋值,而且部分属性会被删除,这取决于等号后面的 dict 有哪些 key.
x.__dict__.update({'a':3, 'c':4})
这样如果实例本身就有 x.a 属性,那么 x.a = 3 x.c = 4