澳门新葡新京内建函数getattr工厂模式,python示例代码

getattr()那些办法最要害的功效是贯彻反射机制。也正是说能够通过字符串获取形式实例。  传入差异的字符串,调用的主意分歧等。

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用字符串调用函数或措施的连带内容,分享…

原型: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函数反射后,是一个方法对象。

 

运营结果:

C:\Python27\python.exe D:/weixin/python_getattr.py
this is number
this is string
this is date

Process finished with exit code 0

 

Linux and
python学习沟通1,2群已满.

Linux and
python学习调换3群新开,招待参加,一同学习.qq 3群:563227894

不前进,不倒退,截至的状态是绝非的.

一只发展,与君共勉,

相关文章