python exec,将staticmethod添加到类中

时间:2013-09-04 16:19:05

标签: python class exec static-methods

在python中,我可以这样做:

exec(code_string, globals(), some_object.__dict__)

向对象添加方法。是否可以以某种类似的方式向类中添加静态方法?像:

exec(code_string, globals(), ClassName.__dict__)

这样我就可以静态调用该方法:

ClassName.some_static_method()

我想要做的是在运行时添加新的staticmethods给定一些定义方法的python代码。即如果我得到了:

code_string = '''
@staticmethod
def test():
    return 'blah'
'''

如何创建并将其实例化为类,以便我可以调用它?

希望我很清楚,谢谢!

修改 向对象添加函数的工作示例:

class TestObject(object):
    pass

code_string = '''
def test():
return 'blah'
'''
t = TestObject()
exec(code_string, globals(), t.__dict__)

1 个答案:

答案 0 :(得分:2)

使用setattr()

>>> code_string = '''
... @staticmethod
... def test():
...     return 'returning blah'
... '''
>>>
>>> exec(code_string)

>>> test
<staticmethod object at 0x10fd25c58>

>>> class ClassName(object):
...     def instancemethod(self):
...             print "instancemethod!"
...
>>> setattr(ClassName, 'teststaticmethod', test)

>>> ClassName.teststaticmethod()
'returning blah'
>>>

And here's an article on being safe with exec() and eval() in python.