python exec,向类中添加staticmethod

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></