一 isinstance(obj,cls)和issubclass(sub,super)
isinstance(obj,cls)检查是否obj是否是类 cls 的对象
class Foo:
pass
class Bar(Foo):
pass
obj = Foo()
bar = Bar()
print(isinstance(obj,Foo)) # True
print(isinstance(bar,Foo)) # True
issubclass(sub, super)检查sub类是否是 super 类的派生类
class Foo:
pass
class Bar(Foo):
pass
print(issubclass(Bar,Foo)) # True
五 __getattribute__
回顾__getattr__
class Foo:
def __init__(self,x):
self.x=x
def __getattr__(self, item):
print('执行的是我')
# return self.__dict__[item]
f1=Foo(10)
print(f1.x)
f1.xxxxxx #不存在的属性访问,触发__getattr__
__getattribute__
class Foo:
def __init__(self,x):
self.x = x
def __getattr__(self, item):
print('执行了__getattr__')
def __getattribute__(self, item):
# 无论属性存不存在,都会执行__getattribute__,
# 当抛出AttributeError异常时,就会执行__getattr__
print('执行的是__getattribute__')
raise AttributeError('抛出异常了')
f1 = Foo(20)
f1.x
f1.xxx
'''
结果
执行的是__getattribute__
执行了__getattr__
执行的是__getattribute__
执行了__getattr__
'''