python exec, add staticmethod to class
在python中,我可以做到:
1 | exec(code_string, globals(), some_object.__dict__) |
向对象添加方法。是否可以以类似的方式向类中添加静态方法?像:
1 | exec(code_string, globals(), ClassName.__dict__) |
这样我就可以静态地调用该方法:
1 | ClassName.some_static_method() |
我要做的是在运行时添加新的静态方法,给定一些定义该方法的Python代码。也就是说,如果我被给予:
1 2 3 4 5 | code_string = ''' @staticmethod def test(): return 'blah' ''' |
如何创建并实例化这个类,以便调用它?
希望我足够清楚,谢谢!
编辑:向对象添加函数的工作示例:
1 2 3 4 5 6 7 8 9 | class TestObject(object): pass code_string = ''' def test(): return 'blah' ''' t = TestObject() exec(code_string, globals(), t.__dict__) |
setattr(使用)P></
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | >>> 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' >>> |
安布尔是由条与exec()是安全和Python中的eval()。P></