python--根据字符串调用类方法或函数

本文作者使用的python版本为: python 3.5.1


根据字符串调用类方法

使用python内置函数getattr可实现。

getattr函数输入一个类对象和一个字符串,返回与字符串同名的类对象的属性。


该函数原型为: getattr(object, name[, default])

object :类的对象

name : 类属性名对应的字符串

default :可选项,当name对应的属性不存在时:如果输入了default参数,返回default;否则产生AttributeError异常。

若name对应的属性存在,该函数返回该属性。


示例:

class example:
    def __init__(self):
        self.member = 0

    def func(self):
        pass

对于该类执行如下语句:

e = example()

member = getattr(e, 'member', None)
func = getattr(e, 'func', None)

print('member is :' + str(member))
func()

通过调用getattr函数,使得:member = e.member,func  = e.func

运行出的结果为:

member is :0
this is a func


当我们只想获取类方法,而不获取类成员变量时,通过类内置变量__dict__来处理。

__dict__是一个字典,其key值是类成员变量名对应的字符串,其value值是成员变量的值。

打印上述类的__dict__:

e = example()
print(e.__dict__)

结果如下:

{'member': 0}

因此可以用如下函数实现只获取类对象的方法的功能:

def call_class_func(object, func_name):
    assert isinstance(func_name, str), 'func_name must be a string'
    if func_name not in object.__dict__:
        func = getattr(object, func_name, None)
        if func is not None:
            func()
            return
    print('object dont have function ' + func_name)


根据字符串调用函数

可以使用内置函数eval实现这个功能。

eval函数输入一个字符串,将这个字符串解析成一个python表达式并执行。


该函数原型为:eval(expression, globals=None, locals=None)

expression:字符串形式表达式

globals :可选项,必须是字典。为表达式提供全局命名空间。

locals :可选项,可以是任何的映射类型的对象。为表达式提供局部命名空间。

globals和locals都缺省时,表达式使用当前环境的全局命名空间和局部命名空间。当只有locals缺省时,locals默认指向globals。


示例:

member = 0
def func():
    print('this is a func')

eval("print('member is :' + str(member))")
eval("func()")

输出结果为:

member is :0
this is a func

eval功能不安全,慎用


欢迎批评指正!


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值