2

在python中我可以这样做:

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

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

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

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

ClassName.some_static_method()

我想要做的是在运行时添加新的静态方法,给定一些定义该方法的 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__)
4

1 回答 1

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

这是一篇关于在 python 中使用 exec() 和 eval() 安全的文章。

于 2013-09-04T17:48:28.577 回答