Python

    xiaoxiao2021-03-25  182

    先上一段代码:

    class MyClass(object): v1 = 1 def __getattribute__(self, *args, **kwargs): print '__getattribute__' return object.__getattribute__(self, *args, **kwargs) def __getattr__(self, name): print '__getattr__' return name def __get__(self, instance, owner): print '__get__' return self class MyClass2(object): d = MyClass() if __name__ == '__main__': c = MyClass() c2 = MyClass2() print '-------- c.v1 --------' print c.v1 print '-------- c.v2 --------' print c.v2 print '-------- c2.d --------' print c2.d print '-------- MyClass.v1 --------' print MyClass.v1

    运行结果:

    -------- c.v1 -------- __getattribute__ 1 -------- c.v2 -------- __getattribute__ __getattr__ v2 -------- c2.d -------- __get__ <__main__.MyClass object at 0x101050f90> -------- MyClass.v1 -------- 1

    可以看到:

    访问c1的v1属性,直接调用getattribute方法。访问c1的v2属性(不存在),先调用getattribute方法,没有找到这个属性,再调用getattr方法。访问c2的d属性(它是MyClass的一个实例),将调用MyClass的get方法。访问MyClass的v1属性,不会调用getattribute和getattr方法。
    转载请注明原文地址: https://ju.6miu.com/read-1751.html

    最新回复(0)