如何正确的利用Python的反射机制

  介绍

如何正确的利用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的反射机制问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

如何正确的利用Python的反射机制