我需要在运行时为方法生成代码.能够运行任意代码并拥有文档字符串非常重要.
我想出了一个解决方案相结合exec,并setattr,这里是一个虚拟的例子:
class Viking(object):
def __init__(self):
code = '''
def dynamo(self, arg):
""" dynamo's a dynamic method!
"""
self.weight += 1
return arg * self.weight
'''
self.weight = 50
d = {}
exec code.strip() in d
setattr(self.__class__, 'dynamo', d['dynamo'])
if __name__ == "__main__":
v = Viking()
print v.dynamo(10)
print v.dynamo(10)
print v.dynamo.__doc__
Run Code Online (Sandbox Code Playgroud)
是否有更好/更安全/更惯用的方式来实现相同的结果?
如何在Python中动态创建函数?
我在这里看到了一些答案,但我找不到一个可以描述最常见情况的答案.
考虑:
def a(x):
return x + 1
Run Code Online (Sandbox Code Playgroud)
如何即时创建这样的功能?我需要compile('...', 'name', 'exec')吗?那么呢?从编译步骤创建一个虚函数并替换它的代码对象?
或者我应该使用types.FunctionType?怎么样?
我想自定义一切:参数的数量,它们的内容,函数体中的代码,结果,...