我需要在运行时为方法生成代码.能够运行任意代码并拥有文档字符串非常重要.
我想出了一个解决方案相结合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__
是否有更好/更安全/更惯用的方式来实现相同的结果?
更新:收到了很多很棒的信息,谢谢 - 回过头来再次阅读我的问题,根据一些答案说明可以做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告诉我们为什么!
谢谢.