如何创建一个python函数的副本

27 浏览
0 Comments

如何创建一个python函数的副本

有可能创建Python函数的真实副本吗?最明显的选择是http://docs.python.org/2/library/copy.html,但我在那里读到:

它通过返回原始对象而“复制”函数和类(浅层和深层);

我需要一个真正的副本,因为我可能会改变函数的一些属性。

更新:

我知道评论中提到的所有可能性。我的用例基于元编程,我通过一些声明性规范构建类。详细细节对于SO来说太长了,但基本上我有一个像这样的函数:

def do_something_usefull(self,arg):
    self.do_work()

我将这个方法添加到各种类中。这些类可以完全无关。使用混入类不是一个选项:我会有很多这样的函数,并且最终会为每个函数添加一个基类。我目前的“解决办法”是将这个函数封装在一个“工厂”中,像这样:

def create_do_something():
    def do_something_usefull(self,arg):
        self.do_work()

这样我总是得到一个新的do_something_useful函数,但我必须像这样包装所有的函数。

你可以相信我,我知道这不是“正常”的面向对象编程。我知道如何“正常”解决这样的问题。但这是一个动态的代码生成器,我希望保持一切尽可能轻量简单。由于Python函数是非常正常的对象,我认为询问如何复制它们并不奇怪!

0