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__继续执行