是否有可能创建 python 函数的真实副本?最明显的选择是http://docs.python.org/2/library/copy.html但我在那里读到:
它通过返回原始对象不变来“复制”函数和类(浅层和深层);
我需要一个真实的副本,因为我可能会更改函数的某些属性。
更新:
我知道评论中提到的所有可能性。我的用例基于元编程,我根据一些声明性规范构造类。完整的细节对于 SO 来说太长了,但基本上我有一个类似的功能
def do_something_usefull(self,arg):
self.do_work()
我会将这个方法添加到各种类中。这些类可以完全不相关。使用 mixin 类不是一种选择:我将拥有许多这样的函数,并且最终会为每个函数添加一个基类。我目前的“解决方法”是将这个函数包装在这样的“工厂”中:
def create_do_something():
def do_something_usefull(self,arg):
self.do_work()
这样我总是得到一个新的 do_something_useful 函数,但我必须像这样包装我的所有函数。
你可以相信我,我知道,这不是“正常的”面向对象编程。我知道如何“正常”地解决这样的问题。但这是一个动态代码生成器,我希望一切都尽可能轻量和简单。而且由于python函数是很普通的对象,所以问如何复制它们我不觉得太奇怪!?