介绍
如何正确的利用Python的反射机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强> hasattr 强>
判断对象中是否有这个方法或变量
class 人(对象): ,def __init__(自我、名称): self.name 才能=,名字 ,def 谈话(自我): 打印才能(“% s正在交谈“% self.name) 时间=p 人(“laowang") print (hasattr (p,“talk")), #,真的。因为存在讨论方法 print (hasattr (p,“name")), #,真的。因为存在的名字变量 print (hasattr (p,“abc")),, #,假的。因为不存在abc方法或变量
<强> getattr 强>
获取对象中的方法或变量的内存地址
class 人(对象): ,def __init__(自我、名称): self.name 才能=,名字 ,def 谈话(自我): 打印才能(“% s正在交谈“% self.name) 时间=p 人(“laowang") 时间=n getattr (p,“name"), #,获取名字变量的内存地址 打印(n),,,, #,此时打印的是:老王 时间=f getattr (p,“talk"), #,获取说话方法的内存地址 f(),,,,,, #,调用说话方法
我们发现getattr有三个参数,那么第三个参数是做什么用的呢?
s =, getattr (p,“abc",“not find") 打印(s),,,, #,打印结果:not 找到。因为abc在对象p中找不到,本应该报错,属性找不到,但因为修改了找不到就输出not 找到
<强> setattr 强>
为对象添加变量或方法
def abc(自我): ,打印(“% s正在交谈“% self.name) class 人(对象): ,def __init__(自我、名称): self.name 才能=,名字 时间=p 人(“laowang") setattr (p,“talk", abc), #,将abc函数添加到对象中p中,并命名为说话 p.talk (p),,,, #,调用说话的方法,因为这是额外添加的方法,需手动传入对象 setattr (p,“age" 30),, #,添加一个变量,复制为30 打印(p.a ge),,, #,打印结果:30
<强> delattr 强>
删除对象中的变量。注意:不能用于删除方法
class 人(对象): ,def __init__(自我、名称): self.name 才能=,名字 ,def 谈话(自我): 打印才能(“% s正在交谈“% self.name) 时间=p 人(“laowang") delattr (p,“name"),, #,删除名字变量 打印(p.name),,, #,此时将报错
关于如何正确的利用Python的反射机制问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。