python学习之特殊魔法__getattr__,__getattribute__

isinstance(obj,cls) obj对象是否是cls类实例而来的

issubclass(sub,super)sub类是否是super类的派生类

__getattribute__ 属性有没有都会触发执行

class Foo:
def __init__(self,x):
self.x=x

def __getattr__(self, item):
print('执行的是getattr')
# return self.__dict__[item]
def __getattribute__(self, item):
print('执行的是getattribute')
# raise AttributeError('抛出异常了')
# raise TabError('xxxxxx')
f1=Foo(10)
f1.x

print('-'*20)

f1.xxxxxx #不存在的属性访问,触发__getattr__

结果:
执行的是getattribute
--------------------
执行的是getattribute

当实例f1访问一个不存在属性xxxx时,Foo类方法__getattribute__会被执行,
raise 抛出一个异常,由Foo类方法__getattr__继续执行

posted on 2020-04-11 12:55  秋雨的蝴蝶  阅读(149)  评论(0编辑  收藏  举报