python exec,将静态方法添加到类中

标签 python class exec static-methods

在 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__)

最佳答案

使用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.

关于python exec,将静态方法添加到类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18619032/

相关文章:

python - 为什么 python exec Define class 不起作用

python - 神经网络Python错误 "Failed to get convolution algorithm"

c++ - 从派生类添加对象

bash - 运行程序后离开交互式 shell 以使用

c++ - 构造函数应该如何报告错误?指向外部标志的指针?

python - 无法使用 Python 类函数作为按钮命令

c++ - 将命令行字符串解析为 argv 格式

python - 如何在导入的模块之间共享全局变量?

python - 如何从单词列表中创建一个 Boggle Board? (反向 Boggle 解算器!)

python - 用\and 分隔的十六进制数据是什么类型的?