__call__ :把类实例当做函数使用 class ImFunc(object): =================== __getattr__ :当一个属性在通常的位置没有被找到的时候会被自动调用(如,一个既不是实例本身的属性,又没有通过self在class tree中找到的属性)。返回属性值或抛出AttributeError。 __getattribute__:无条件被调用,通过实例访问属性。若class中定义了__getattr__,这个__getattr__也不会被调用,除非显式地调用或者引发AttributeError后,才会调用__getattr__。 python中,查找属性的顺序是: 1. 首先调用__getattribute__,查找成功则返回结果; 2. 若1查找失败,再调用__getattr__;若仍然查找失败,则报错(自己override方法了除外,会照着代码设定处理); e.g.
运行结果: c.a : __getattribute__() is called abc c.zz : __getattribute__() is called zz : __getattr__() is called zz from getattr ======================= __setattr__: 当给一个属性设置值的时候会调用的函数,注意没有__setattribute__ ======================= __get__ :如果类定义了它,则这个类就叫做描述器(descriptor),onwer是所有者类,instance是访问描述器的实例,若不通过实例而是通过类来访问的话,则instance为None |
|