# isinstance issubclass 与系统内置属性 __getattribute__
# isinstance(obj, cls)检查obj是否是类cls的实例
class Foo:
pass
obj = Foo()
print(isinstance(obj, Foo)) # True 判断obj是否是Foo类的实例
mystr = 'hello world'
print(isinstance(mystr, str)) # True 判断字符串是否是str这个类的实例
# issubclass(sub, super) 检查sub类是否是super类的子类
class A:
pass
class B(A):
pass
b1 = B()
print(issubclass(B, A)) # True 判断B是否是A的子类
print(isinstance(b1, A)) # True 判断b1是否是A的实例
# __getattribute__
class Foo1:
def __init__(self, x):
self.x = x
def __getattr__(self, item):
print('属性不存在时执行的是我')
# return self.__dict__[item]
def __getattribute__(self, item): # 不管属性是否存在,都要执行此方法
print('不管属性是否存在,都要执行我')
raise AttributeError('抛出AttributeError异常') # __getattr__会监听__getattribute__抛出的AttributeError异常,一但发现此异常就会执行__getattr__中的代码
# 当__getattribute__与__getattr__同时存在时,只会执行__getattribute__,除非__getattribute__在执行过程中抛出AttributeError异常