我有一个继承自 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 https://mail.python.org/pipermail/cplusplus-sig/2009-May/014505.html,如发布于2 https://stackoverflow.com/questions/4696966/copying-a-boost-python-object.
我现在遇到以下问题:当我执行以下操作时:
magnet = Magnet()
magnet_2 = copy.deepcopy(magnet)
then magnet
属于类型Magnet
, magnet_2
然而,它的类型是CMagnet
。我也需要它的类型Magnet
。它缺乏一切Magnet
方法。如何让 deepcopy 复制(并返回)整个内容Magnet
对象而不仅仅是一个副本CMagnet
part?
由于您没有提供最小的、可重复的示例 https://stackoverflow.com/help/minimal-reproducible-example我无法快速检查以下肮脏的把戏是否有效,但我认为它应该有效。
您可以添加一个__deepcopy__()
方法到您的类,将工作委托给底层boost-python
对象,然后修复结果的类型。
def __deepcopy__(self, memo):
result = super().__deepcopy__(memo)
result.__class__ = self.__class__
return result
如何让 deepcopy 复制(并返回)整个 Magnet 对象,而不仅仅是 CMagnet 部分的副本?
请注意,generic__deepcopy__()
函数复制输入对象的所有字段,因此只是类型错误 - 复制对象的内容应该是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)