python - 使从 boost-python 类继承的 Python 类可复制
问题描述
我有一个继承自 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)
thenmagnet
是 类型Magnet
,magnet_2
然而 是 类型CMagnet
。我需要它也是 type Magnet
。它缺少所有Magnet
方法。如何让 deepcopy 复制(并返回)整个Magnet
对象,而不仅仅是CMagnet
部分的副本?
解决方案
由于您没有提供最小的、可重现的示例,我无法快速检查以下肮脏的技巧是否有效,但我认为它应该有效。
您可以向您的类添加一个__deepcopy__()
方法,将工作委托给底层boost-python
对象,然后修复结果的类型。
def __deepcopy__(self, memo):
result = super().__deepcopy__(memo)
result.__class__ = self.__class__
return result
如何让 deepcopy 复制(并返回)整个 Magnet 对象,而不仅仅是 CMagnet 部分的副本?
请注意,该generic__deepcopy__()
函数复制输入对象的所有字段,因此只有类型错误 - 复制对象的内容应该是正确的。
推荐阅读
- apache-spark - How do i pass Env variales to a spark job?
- c# - Unable to read file in Hololens
- c# - Azure 函数在 Linux 上出现“无法启动的侦听器”错误
- kubernetes - How to list microk8s' containers with microk8s.ctr
- python - 如何用函数计算python中的唯一单词?
- c# - DatePicker 中日期的垂直对齐方式
- machine-learning - 如何限制 LSTM 模型中的序列预测以匹配特定模式?
- php - How to use ajax for saving image with php
- xpath - 如何更新具有最大子属性的 XML 属性节点?
- visual-studio-code - Keyboard shortcut to switch from source control "diff" mode back into normal editing?