两个与反射无关的内置方法:
isinstance(obj,cls)判断一个对象是不是一个类的实例。
issubclass(cls,obeject)判断一个类是不是一个类的子类。
下面介绍与反射有关的内置函数。
下面四个函数是专门来操作类与对象属性的,通过字符串来操作类与对象的属性,这种操作称为反射。
class People: country='China' def __init__(self,name): self.name=name def tell(self): print('%s is aaa' %self.name) obj=People('monicx') #hasattr函数 print('country'in People.__dict__)#判断一下属性是否存在 print(hasattr(People,'country')) print(hasattr(People,'tell')) print(hasattr(People,'name')) #getattr函数 print(getattr(People,'country'))#China print(getattr(People,'tell',None))#<function People.tell at 0x00000000026BA950> #setattr函数 # People.x=11111 setattr(People,'x',11111) print(People.x) #obj.age=18 setattr(obj,'age',18) #delattr函数 # del People.country delattr(People,'country') print(People.__dict__) #del obj.name delattr(obj,'name') print(obj.__dict__)
下面来一个反射的简单应用场景。
当用户输入命令的时候能够反射到对应的功能上:
class Foo: def run(self): while True: cmd=input('cmd>>:').strip()#用户输入反射到它的功能上 # print('%s run....'%cmd) if hasattr(self,cmd): func=getattr(self,cmd) func() def download(self): print('download....') def upload(self): print('upload') obj=Foo() obj.run()
运行结果为: