|
>>> a.v 22
>>> a.v=10
>>> a.__dict__ #我们设置a.v后,发现实例的__dict__中仍然空空如也。因为此时调用的是__set__方法,值10存入到了Desc实例的value属性上了。
{}
>>> A.__dict__
mappingproxy({'__module__': 'b', '__doc__': None, '__dict__': , '__weakref__': , 'v': })
>>> a.v #此时得到的还是Desc的__get__方法返回的结果。
10
>>> del a.v #不允许我们删除
Traceback (most recent call last):
File "", line 1, in
AttributeError: __delete__
>>> A.v=30
>>> A.__dict__
mappingproxy({'__module__': 'b', '__doc__': None, '__dict__': , '__weakref__': , 'v': 30})
#我们把__set__方法的原来语句注销,添加raise AttribeError语句,再次运行
>>> a.v=30 #我们在__set__中手动添加了AttributeError异常,所以我们再也不能设置a.v的值了,因此该属性鞭策了只读属性。
Traceback (most recent call last):
File "", line 1, in
File "/home/aaa/proj/b.py", line 8, in __set__
raise AttributeError
AttributeError
>>> A.v=20 #通过类,仍然可以改变属性
>>> A.__dict__ #改变后,变成了普通属性20了,这时甚至都已经不再是描述符类了。
mappingproxy({'__doc__': None, '__dict__': , '__module__': 'b', '__weakref__': , 'v': 20})
>>> del A.v |
|
|