Python多级继承只初始化基类


class A:
def __init__(self) -> None:
print("s")
class B(A):
def __init__(self) -> None:
print("s1")
super().__init__()

class C(B):
def __init__(self) -> None:
super().__init__()
C()

这里我正在初始化B类,但我想在这种情况下单独初始化基类A。我该怎么做呢?

super()函数有两个参数形式

super([type[, object-or-type]])

如果给定两个参数typeobj,super返回一个绑定对象,表示obj的一个版本,其超类解析将从type开始。通常,C中的super().__init__()super(C, self).__init__()基本等价。但是您可以提供B作为方法解析的起点,以便只考虑MRO中比B更深入的事情。

class C(B):
def __init__(self) -> None:
super(B, self).__init__()

也就是说,很少有这样的用例。如果您正在部分初始化一个对象,并试图monkeypatch它的父对象之一,那么这是一个很好的迹象,表明C不应该是B的子类,或者您的体系结构有更大的缺陷。因此,通常情况下,如果您发现自己处于这种情况,请考虑重构。

最新更新