zeu*_*300 7 python deep-copy boost-python
我有一个继承自boost-python类的类:
class Magnet(CMagnet): # CMagnet is a C++ based boost-python class
def __init__(self):
CMagnet.__init__(self)
def python_method(self):
...
Run Code Online (Sandbox Code Playgroud)
在CMagnet的C ++实现中,我使用了1中的代码,如2中所示。
我现在遇到以下问题:执行以下操作时:
magnet = Magnet()
magnet_2 = copy.deepcopy(magnet)
Run Code Online (Sandbox Code Playgroud)
然后magnet是类型Magnet,magnet_2但是是类型CMagnet。我需要它也要类型Magnet。它缺少所有Magnet方法。如何获得Deepcopy来复制(并返回)整个Magnet对象,而不仅仅是CMagnet零件的副本?
由于您没有提供最小的、可重现的示例,我无法快速检查以下肮脏技巧是否有效,但我认为它应该有效。
您可以__deepcopy__()向类添加一个方法,将工作委托给基础boost-python对象,然后修复结果的类型。
def __deepcopy__(self, memo):
result = super().__deepcopy__(memo)
result.__class__ = self.__class__
return result
Run Code Online (Sandbox Code Playgroud)
如何让 deepcopy 复制(并返回)整个 Magnet 对象,而不仅仅是 CMagnet 部分的副本?
请注意,该generic__deepcopy__()函数复制输入对象的所有字段,因此只是类型错误 - 复制对象的内容应该是正确的。