【问题标题】:how to define deep copy of subclass if super class has customized deep copy如果超类有自定义深拷贝,如何定义子类的深拷贝
【发布时间】:2018-06-06 15:45:36
【问题描述】:

我的超类A有一个方法copy(),这是一个自定义的深拷贝函数。子类 B 想要继承这个深拷贝功能,同时也深拷贝它自己的成员和方法。

在下面的解释示例中,复制函数仅复制 B 的“A 部分”。我的问题是如何修改复制函数以便同时深度复制成员 T 和方法 addOn() 以及其他潜在的类特征?

class B(A):
    def __init__(self, T):
        super().__init__()
        self.T = T
    def addOn(self):
        print("additional feature")
    def copy(self):
        return super().copy()

【问题讨论】:

  • 如何覆盖复制功能并访问父级的属性而不是父级访问子级的属性。
  • @mad_ 我想深度复制 B 的所有成员和功能,无论它来自 A 还是 B

标签: python inheritance copy subclass deep-copy


【解决方案1】:

你已经有了一个好的开始,你只需要扩展子类的复制功能:

class B(A):
    ...
    def copy(self):
        new_b = super().copy()  # new_b now has all the A stuff copied
        new_b.T = however_you_copy_a_T_instance(self.T)
        return new_b

由于addOn 只是一个方法,因此无需复制它 - 它隐含地包含在任何 B 实例中。

顺便说一句,如果您将类的复制功能实现为__copy__()__deepcopy__(),那么您的类将与https://docs.python.org/3.6/library/copy.html 提供的内置复制和深度复制内容一起正常工作(有关更多信息,请参阅该页的末尾信息)。

【讨论】:

  • 关于“however_you_copy_a_T_instance”,你的意思是使用classnewdict和备忘录之类的东西吗?你能详细说明一下吗?
  • 父类 A 来自外部库。我不知道他们为什么不直接覆盖 __deepcopy__()
猜你喜欢
  • 2015-06-12
  • 1970-01-01
  • 2012-04-12
  • 2015-01-13
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多