本文作者使用的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功能不安全,慎用
欢迎批评指正!