我需要在运行时为方法生成代码.能够运行任意代码并拥有文档字符串非常重要.
我想出了一个解决方案相结合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)
是否有更好/更安全/更惯用的方式来实现相同的结果?
更新:收到了很多很棒的信息,谢谢 - 回过头来再次阅读我的问题,根据一些答案说明可以做XYZ,这不是问题.这个问题的核心是:"这个问题的主要焦点是用简单的英语找到答案,解释为什么Python,Perl和Ruby在将它们移植到另一种语言时就是这样的."
一直在研究Perl,Python和Ruby之间的差异 - 这对我而言是迄今为止我发现的最有趣的差异之一,即看起来可以将Python转录为C,但这是不可能的将Perl转录成任何语言.没有发现任何关于Ruby的东西,但是猜测它是99.99%的所有东西都是一个对象可能会使这个很难,如果不是不可能转录到另一种语言.
这个问题的主要焦点是用简单的英语找到答案,为什么Python,Perl和Ruby在将它们移植到另一种语言时就是这样的.
可能重复:
如何将OO Perl转换为Java?
你好.
我有一个perl脚本,我想把它翻译成Java.
是否有从perl脚本到Java的翻译/转换器?
顺便说一下,我正在开发一个Android 2.2应用程序.
编辑
我已经关闭了这个问题.停止低估我!!!!!! 如果你downvote告诉我们为什么!
谢谢.