在阅读文章一些Python的开放源代码项目源代码时 ,会见到一些目标调用了一个方法,但在该目标之中却又找不着该方法 。还很有可能会见到在调用某一方法是并并不是立即调用只是应用了getattr这一方法;好在如今IDE较为智能化,一般也还可以关系找获得该方法;
  调用目标自身沒有存有的方法属性、间接性调用方法 ,下边看一下在Python中这是什么原因;
  在Python中有许多内嵌函数,上边常说的作用更是根据它的内嵌去看书完成的:应用了那么好多个内嵌函数:setattr 、getattr、hasattr函数;

setattr函数

  字面意思,设定属性值 ,它的真正工作也仅仅设定函数值;但它能够给某一目标设定一个他不会有的属性而且取值;

class Ten:
    def __init__(self, data):
    print("init")

def register(name, fn):
setattr(Ten, name, fn)

  上边界定了一个类,此类并沒有属性或除开init方法外别的的方法;界定一个register方法,该方法用于向Ten类中注册属性、方法;

t = Ten()

调用register方法 ,注册属性val ,数值5;

register("val", 5)
print(t.val)

打印输出注册的属性val值:5;

界定一个新类:Ops

class Ops:
    @staticmethod
    def add(x, y):
        return x   y

在Ten类中注册ops属性,数值刚界定的类Ops;

register("ops", Ops)
value= t.ops.add(1, 2)
print(value)

这时能够根据注册的属性ops调用该属性的方法;

getattr 、hasattr函数

  getattr函数用于获得属性、hasattr用于检验某一属性是不是存有;

value = getattr(t, "val")
print(value)

  获得上边注册的属性val,輸出数值5;
获得不会有的属性会抛出异常 ,这时可应用hasattr函数用于分辨属性是不是存有,再做下一步解决;

hasattr(t,"mul")
回到False
hasattr(t,”va	”)
回到True

  了解了这好多个函数,见到图上这类编码就可以立懂了。

文章来源于网络 ,如有侵权请联系站长QQ61910465删除
本文版权归趣快排SEO www.SeogurUblog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▶61910465