标签:运行 贵的 性能 多重 大神 pre 多重继承 _id 父类
差别:
__getattribute__:是无条件被调用.对不论什么对象的属性訪问时,都会隐式的调用__getattribute__方法,比方调用t.__dict__,事实上运行了t.__getattribute__("__dict__")函数.所以假设我们在重载__getattribute__中又调用__dict__的话,会无限递归,用object大神来避免,即object.__getattribute__(self, name).
__getattr__:仅仅有__getattribute__找不到的时候,才会调用__getattr__.属性的lookup顺序例如以下:
以下给个代码片段大家自己去把玩探索.
class C(object): def __setattr__(self, name, value): print "__setattr__ called:", name, value object.__setattr__(self, name, value) def __getattr__(self, name): print "__getattr__ called:", name def __getattribute__(self, name): print "__getattribute__ called:",name return object.__getattribute__(self, name) c = C() c.x = "foo" print c.__dict__['x'] print c.x
飘逸的python - __get__ vs __getattr__ vs __getattribute__以及属性的搜索策略
标签:运行 贵的 性能 多重 大神 pre 多重继承 _id 父类
原文地址:http://www.cnblogs.com/mfmdaoyou/p/6752381.html