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]])
如果给定两个参数type
和obj
,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
的子类,或者您的体系结构有更大的缺陷。因此,通常情况下,如果您发现自己处于这种情况,请考虑重构。