Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案。__dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值。
¶__dict__访问对象属性
__dict__属性是一个字典(dict),它包含了该对象所有的属性。
1 | class Parent(object): |
OutPut:
1 | {'__module__': '__main__', 'a': 0, 'b': 1, '__init__': <function Parent.__init__ at 0x0000021251F037B8>, 'p_test': <function Parent.p_test at 0x000002125218DAE8>, '__dict__': <attribute '__dict__' of 'Parent' objects>, '__weakref__': <attribute '__weakref__' of 'Parent' objects>, '__doc__': None} |
python中的内置的数据类型(如int, list, dict)不存在__dict__属性
¶继承状态下__dict__属性
子类有自己的__dict__,父类也有自己的__dict__,子类的类变量和函数放在子类的dict中,父类的放在父类dict中。
父子类对象有自己的__dict__属性, 存储self.xx 信息,子类不重写父类实例化变量,父子类对象__dict__一致,子类重写父类实例化变量,子类对象__dict__会发生改变
1 | class Parent(object): |
1 | {'__module__': '__main__', 'a': 0, 'b': 1, '__init__': <function Parent.__init__ at 0x000001FC798437B8>, 'p_test': <function Parent.p_test at 0x000001FC79ACDAE8>, '__dict__': <attribute '__dict__' of 'Parent' objects>, '__weakref__': <attribute '__weakref__' of 'Parent' objects>, '__doc__': None} |
¶__dict__操作私有变量
java中可以通过反射机制操作到对象的私有属性,python中可以通过__dict__操作私有变量
__xx:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到)
1 | class test(object): |
OutPut:
1 | 10 |