isinstance(obj,cls)检查obj是否是cls的对象
issubclass(sub,super)检查sub是否是super的派生类
class Bar: pass class Foo(Bar): pass obj =Foo() print(isinstance(obj,Foo))#True print(issubclass(Foo,Bar))#True
二、反射
python面向对象中的反射:通过字符串的形式操作对象相关的属性
通过下面四个函数可以实现,适用于类和对象
hasattr(object,name):判断一个object中有没有name属性或者方法
getatrr(object,name,default=None):获取object中的name属性或方法,设置defult=None时没找到返回None,没设置报错
setattr(x,y,z)修改x中y的值为z,当y不存在时添加y的值为z
delattr(x,y)删除x中的y属性或方法
演示代码:
class BlackMedium: feature='Ugly' def __init__(self,name,addr): self.name=name self.addr=addr def sell_house(self): print('%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不傻逼' %self.name) def rent_house(self): print('%s 黑中介租房子啦,傻逼才租呢' %self.name) b1=BlackMedium('万成置地','回龙观天露园') #检测是否含有某属性 print(hasattr(b1,'name')) print(hasattr(b1,'sell_house')) #获取属性 n=getattr(b1,'name') print(n) func=getattr(b1,'rent_house') func() # getattr(b1,'aaaaaaaa') #报错 print(getattr(b1,'aaaaaaaa','不存在啊')) #设置属性 setattr(b1,'sb',True) setattr(b1,'show_name',lambda self:self.name+'sb') print(b1.__dict__) print(b1.show_name(b1)) #删除属性 delattr(b1,'addr') delattr(b1,'show_name') delattr(b1,'show_name111')#不存在,则报错 print(b1.__dict__) 四个方法的使用演示