内建函数getattr工厂模式,python示例代码

 

Python中用字符串调用函数或格局以身作则代码,python示例代码

前言

本文首要给大家介绍了有关Python用字符串调用函数或艺术的连带内容,分享出来供我们参照他事他说加以考察学习,下边来一块看看详细的介绍:

先看三个例证:

>>> 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用字符串调用函数或格局的相干内容,分享…

不前行,不倒退,甘休的处境是绝非的.

Linux and
python学习交换1,2群已满.

一路前进,与君共勉,

getattr()那几个情势最紧要的效劳是促成反射机制。也正是说能够经过字符串获取形式实例。  传入差异的字符串,调用的法子不相符。

那样的话,想想是还是不是用途相当多,我得以把措施名配置到文件中,读取时选拔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)()

运作结果:

Linux and
python学习沟通3群新开,接待参与,一同学习.qq 3群:563227894

发表评论

电子邮件地址不会被公开。 必填项已用*标注