如何正确的利用Python的反射机制-创新互联

如何正确的利用Python的反射机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

成都创新互联专注于企业全网营销推广、网站重做改版、临翔网站定制设计、自适应品牌网站建设、H5高端网站建设商城网站定制开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为临翔等各大城市提供网站开发制作服务。

hasattr

判断对象中是否有这个方法或变量

class Person(object):
 def __init__(self,name):
  self.name = name
 def talk(self):
  print("%s正在交谈"%self.name)
p = Person("laowang")
print(hasattr(p,"talk")) # True。因为存在talk方法
print(hasattr(p,"name")) # True。因为存在name变量
print(hasattr(p,"abc"))  # False。因为不存在abc方法或变量

getattr

获取对象中的方法或变量的内存地址

class Person(object):
 def __init__(self,name):
  self.name = name
 def talk(self):
  print("%s正在交谈"%self.name)
p = Person("laowang")
n = getattr(p,"name") # 获取name变量的内存地址
print(n)    # 此时打印的是:laowang
f = getattr(p,"talk") # 获取talk方法的内存地址
f()      # 调用talk方法

我们发现getattr有三个参数,那么第三个参数是做什么用的呢?

s = getattr(p,"abc","not find")
print(s)    # 打印结果:not find。因为abc在对象p中找不到,本应该报错,属性找不到,但因为修改了找不到就输出not find

setattr

为对象添加变量或方法

def abc(self):
 print("%s正在交谈"%self.name)
class Person(object):
 def __init__(self,name):
  self.name = name
p = Person("laowang")
setattr(p,"talk",abc) # 将abc函数添加到对象中p中,并命名为talk
p.talk(p)    # 调用talk方法,因为这是额外添加的方法,需手动传入对象
setattr(p,"age",30)  # 添加一个变量age,复制为30
print(p.age)   # 打印结果:30

delattr

删除对象中的变量。注意:不能用于删除方法

class Person(object):
 def __init__(self,name):
  self.name = name
 def talk(self):
  print("%s正在交谈"%self.name)
p = Person("laowang")
delattr(p,"name")  # 删除name变量
print(p.name)   # 此时将报错

关于如何正确的利用Python的反射机制问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联成都网站设计公司行业资讯频道了解更多相关知识。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章标题:如何正确的利用Python的反射机制-创新互联
标题来源:http://scyanting.com/article/ccdgeh.html