在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__)
答案 0 :(得分:2)
>>> 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.