我有一个继承自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部分的副本?
发布于 2019-06-05 00:10:27
因为您没有提供Minimal, Reproducible Example,所以我不能快速检查以下肮脏的技巧是否有效,但我认为它应该有效。
您可以向类添加一个__deepcopy__()方法,该方法将工作委托给基础boost-python对象,然后修复结果的类型。
def __deepcopy__(self, memo):
result = super().__deepcopy__(memo)
result.__class__ = self.__class__
return result如何让deepcopy复制(并返回)整个磁体对象,而不仅仅是CMagnet部分的副本?
请注意,generic__deepcopy__()函数复制了输入对象的所有字段,因此只有类型错误-复制对象的内容应该是正确的。
https://stackoverflow.com/questions/56292040
复制相似问题