gpt4 book ai didi

python - python抽象基类的惯用多重继承

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:07 25 4
gpt4 key购买 nike

用最简单的话来说,我想要的是一个带有一两个附加方法的tuple__new____init__ 不会被修改。

我想创建一个抽象基类,它是 collections.abc.Sequence 的子类。然后我想将它用于基本上是 tuple 子类的东西。类图是这样的:

   collections.abc.Sequence
/ \
/ \
/ \
MyABC tuple
\ /
\ /
\ /
MyClass

原因:

  • MyABC 定义了一些自定义接口(interface)。它在那里,因此第三方不会被迫子类化 MyClass
  • tuple 是其性能和已实现方法所必需的。

问题:

  • 惯用的方法是编写 class MyClass(MyABC, tuple) 还是我应该使用寄存器?
  • 还有其他我遗漏的明显问题吗?
  • tuple 的空间和性能优势是否会因为子类化而丢失?

最佳答案

  • 是编写 class MyClass(MyABC, tuple) 的惯用方法还是应该使用寄存器?

    在我看来,这是一种非常惯用的方式。这也就是所谓的“inheritance diamond”。MyClass__init__ 方法可能看起来像 this .

  • 还有其他我遗漏的明显问题吗?

    好吧,这取决于问题中未明确说明的某些方面,例如你到底想做什么?你怎么样?这个新子类的使用模式如何?您在新类(class)中使用的新方法有多普遍/具体?在不创建子类的情况下,有更有效/更清洁/可读/更容易/任何方法吗?即使是,是否仍然值得做,如果你会获得更多的灵 active /可读性等等?

    作为一般规则,我会说创建子类不仅可以,而且是可取的如果你会经常使用它和/或它会让你更容易地解决一些问题而无需剧烈/非常不良的附带影响。

  • 元组的空间和性能优势是否会因为子类化而丢失?

    这是一个棘手的问题。同样,取决于你在做什么以及你如何设计你的子类等......,可能。请记住,例如,元组是一种不可变类型,并且此属性具有一些性能优势超过可变类型。所以,如果你例如会以某种方式修改此属性,这可能代表一些损失,相比之下到原始元组。我也不太确定 Python 如何看待元组的子类。我的意思是,我不知道 Python 是否仍会“盲目地相信”您的类是不可变的,因此仍然表现得与元组完全一样。如果不是,那么在您的具体情况下它实际上有多糟糕。不可变/可变问题只是一个例子,可能存在其他更相关的问题,但我不能确定地说......也许你可以做一些小规模的测试来衡量性能。

考虑一些 these aspects(Guido 本人)也可能是个好主意。

希望对您有所帮助!

关于python - python抽象基类的惯用多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16479471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com