|
发表于 2023-8-29 09:30:01
|
显示全部楼层
本帖最后由 isdkz 于 2023-8-29 09:52 编辑
>>> D.__dict__
mappingproxy({'__module__': '__main__', '__slots__': ['x', 'y'], '__init__': <function D.__init__ at 0x000002172D4D5630>, 'x': <member 'x' of 'D' objects>, 'y': <member 'y' of 'D' objects>, '__doc__': None})
>>> E.__dict__
mappingproxy({'__module__': '__main__', '__dict__': <attribute '__dict__' of 'E' objects>, '__weakref__': <attribute '__weakref__' of 'E' objects>, '__doc__': None})
x 和 y 都被 E 的父类的两个成员接管了,所以它不属于 e 对象独有的,自然就在 __dict__ 中看不到了
举个例子:
>>> class T:
... x = 1
... y = 1
... z = 1
...
>>> t = T()
>>> t.__dict__ # t 从它的类中获得的 x, y, z 并不属于它,所以 __dict__ 看不到
{}
>>> t.x = 18 # 当 t 拥有了自己独有的成员对象, __dict__ 就可以看到
>>> t.__dict__
{'x': 18}
>>>
你之前的例子是因为从父类中继承过来的'x': <member 'x' of 'D' objects>, 'y': <member 'y' of 'D' objects>是一个独特的对象,当你给这个属性赋值的时候就会被这个成员对象拦截,所以子类是不可能拥有自己的x,y属性了,因为都被抢走了 |
|