python类的反射
hasattr:判断一个方法是否存在与这个类中
getattr:根据字符串去获取obj对象里的对应的方法的内存地址,加"()"括号即可执行
示例:获取用户输入的内容,调用相应的方法
class dog(object): def __init__(self,name):#构造函数 self.name=name def eat(self,food):#新建一个吃的方法 print("%s is eating"%self.name,food) d=dog("Pig")#实例化dog choise=input(">>:").strip()#定义一个让用户输入字符串 if hasattr(d,choise):#判断用户输入的eat方法是否存在 func=getattr(d,choise)#存在则通过给getattr赋值进行调用执行 func("Yumi") 运行结果: >>:eat Pig is eating Yumi
setattr:通过setattr将外部的一个函数绑定到实例中
示例:为dog新添加一个方法,首先需要在外部自己先定义一个新的方法
def bulk(self): print("%s is WangWang......"%self.name) class dog(object): def __init__(self,name): self.name=name def eat(self,food): print("%s is eating"%self.name,food) d=dog("Pig") choise=input(">>:").strip() 如何执行? if hasattr(d,choise): func=getattr(d,choise) func("Yumi") else: setattr(d,choise,bulk) d.talk(d) 通过setattr方法把bulk函数绑定到dog这个实例里,方法名是"talk"
delattr:删除一个实例或者类中的方法
if hasattr(d,choise): delattr(d,choise)#删除类里的方法 # func=getattr(d,choise) # func("Yumi") else: # setattr(d,choise,bulk) # d.talk(d) setattr(d,choise,22) print(getattr(d,choise)) print(d.name) 运行结果: AttributeError: 'dog' object has no attribute 'name' 说明已经将其删除。
总结
以上就是今天的python类的反射,包含四个方法,分别是:hasattr、getattr、setattr、delattr。分别是:判断一个属性是否在类中,获取方法并调用、增加外部新的方法到实例中、删除实例中的方法。
感谢阅读,欢迎在评论区中发表自己不同的观点,若有其他问题请在评论区留言,喜欢的朋友请多多关注转发支持一下。