在python中派生相同的类两次是可以的吗?



我有这样的代码:

class A:
...
class B(A):
...
class C(B, A):
...
如你所见,类C来自两次,一次直接,一次间接通过类B

.可以吗?这可能会发生什么错误?

可以吗?

是的。Python会将C[C, B, A, object]的MRO唯一地区分出来,因此碱基A只出现一次。这个过程在Python 2.3方法解析顺序中有描述。

这可能会发生什么错误?

有人看到你的代码可能会觉得"这太奇怪了。为什么他们在这里使用多重继承?">

在更复杂的情况下,Python也可能在创建一致的MRO时遇到麻烦,例如,如果您有class C(A, B)而不是C(B, A)类,这将是一个模棱两可的MRO。但是您将知道是否会发生这种情况,因为在类定义期间将出现TypeError异常。

是的,这很好。这被称为多重继承。在其他语言中,比如c++,这会导致一个叫做"菱形问题"的问题。因为在绘制说明继承的图表时的形状。Python定义了一个方法解析顺序(MRO)来解决这个问题。我建议你阅读钻石问题和Python的MRO来更好地理解这个问题。

注意,菱形问题涉及四个类,而不是示例中的三个:
class A:
...
class B(A):
...
class C(A):
...
class D(C, B):
...
  • 这被称为多重继承。
  • 然而,多重继承会导致一些棘手的情况,所以尽量避免这些情况。
  • 通常建议在可能的情况下使用单继承,在真正需要的时候使用多继承。

最新更新