我有一个继承自boost-python类的类:
class Magnet(CMagnet): # CMagnet is a C++ based boost-python class
def __init__(self):
CMagnet.__init__(self)
def python_method(self):
...
在CMagnet的C ++实现中,我使用了1中发布的2中的代码。
我现在遇到以下问题:当我执行以下操作时:
magnet = Magnet()
magnet_2 = copy.deepcopy(magnet)
然后,magnet
的类型为Magnet
,magnet_2
的类型为CMagnet
。我还需要它也属于Magnet
类型。它缺少所有Magnet
方法。如何获得Deepcopy来复制(并返回)整个Magnet
对象,而不仅仅是复制CMagnet
部分的副本?
答案 0 :(得分:3)
由于您没有提供Minimal, Reproducible Example,因此无法快速检查以下肮脏的trick俩是否有效,但我认为应该可以。
您可以在类中添加一个__deepcopy__()
方法,该方法将工作委派给基础的boost-python
对象,然后修复结果的类型。
def __deepcopy__(self, memo):
result = super().__deepcopy__(memo)
result.__class__ = self.__class__
return result
如何获取Deepcopy来复制(并返回)整个Magnet对象,而不仅是CMagnet部分的副本?
请注意,generic__deepcopy__()
函数会复制输入对象的所有字段,因此只有错误的类型-复制对象的内容应该正确。