getattr()那几个艺术最关键的法力是贯彻反射机制。也等于说能够因此字符串获取情势实例。  传入差异的字符串,调用的情势不雷同。

Python中用字符串调用函数或方法言传身教代码,python示例代码

前言

本文首要给大家介绍了有关Python用字符串调用函数或措施的连带内容,分享出来供大家参考学习,上面来1块看看详细的牵线:

先看2个事例:

>>> def foo():
    print "foo"

>>> def bar():
    print "bar"

>>> func_list = ["foo","bar"]
>>> for func in func_list:
    func()
TypeError: 'str' object is not callable

我们愿意遍历执行列表中的函数,但是从列表中取得的函数名是字符串,所以会唤醒类型错误,字符串对象是不可能调用的。若是大家想要字符串变成可调用的靶子呢?或是想透过变量调用模块的习性和类的习性呢?

以下有三种艺术能够完毕。

eval()

>>> for func in func_list:
    eval(func)()
foo
bar

eval()
平日用来施行一个字符串表达式,并赶回表明式的值。在此处它将字符串转换到对应的函数。eval()
成效强大不过比较危险(eval is evil),不提议利用。

locals()和globals()

>>> for func in func_list:
    locals()[func]()
foo
bar

>>> for func in func_list:
    globals()[func]()
foo
bar

locals() 和 globals()
是python的多少个放置函数,通过它们可以一字典的点子访问片段和全局变量。

getattr()

getattr() 是 python 的内建函数,getattr(object,name) 就也便是object.name,可是此地 name 能够为变量。

永利皇宫 ,返回 foo 模块的 bar 方法

>>> import foo
>>> getattr(foo, 'bar')() 

回去 Foo 类的属性

>>> class Foo:
  def do_foo(self):
    ...

  def do_bar(self):
    ...

>>> f = getattr(foo_instance, 'do_' + opname)
>>> f()

总结

如上正是那篇小说的全体内容了,希望本文的始末对我们的上学也许工作能推动一定的赞助,就算有疑点大家能够留言调换,谢谢大家对帮客之家的帮忙。

参考

Calling a function of a module from a string with the function’s name in
Python

How do I use strings to call functions/methods?

前言
本文重要给我们介绍了关于Python用字符串调用函数或方法的相关内容,分享…

原型:getattr(对象,方法名)

 

举个栗子:

pyMethod类下定义了多少个措施,getattr(pyMethod(),’out%s’%str)()  
传入的章程名不一致,调用不相同的措施。些处方法名字为字符串。

那样的话,想想是还是不是用途很多,笔者能够把办法名配置到文件中,读取时选用getattr动态去调用。

#coding=utf-8

class pyMethod(object):
    def outstr(self):
        print('this is string')

    def outint(self):
        print('this is number')

    def outdate(self):
        print('this is date')


if __name__=="__main__":
    str = 'int'
    getattr(pyMethod(),'out%s'%str)()     
    str = 'str'
    getattr(pyMethod(),'out%s'%str)()
    str = 'date'
    getattr(pyMethod(),'out%s'%str)()

 

 getattr(pyMethod(),'out%s'%str)()  注意pyMethod()和最后的()   这里之所以这么写pyMethod()加括号是实例化类对象,最后的括号,因为getattr函数反射后,是一个方法对象。
网站地图xml地图