考虑一下-基类A,类B从A继承,类C从B继承。在初始化器中调用父类初始化器的通用方法是什么?如果这听起来仍然不太明确,请使用以下代码。class A(object): def __init__(self): print "Initialiser A was called"class B(A): def __init__(self): super(B,self).__init__() print "Initialiser B was called"class C(B): def __init__(self): super(C,self).__init__() print "Initialiser C was called"c = C()这就是我现在的做法。但是它似乎仍然太泛泛,您仍然必须手动传递正确的类型。现在,我尝试使用self.__class__super()作为第一个参数,但是显然,它不起作用-如果将其放在C的初始化程序中-足够公平,B的初始化程序将被调用。如果在B中执行相同的操作,则“ self”仍指向C的实例,因此您最终再次调用B的初始化程序(此操作以无限递归结束)。现在无需考虑钻石继承,我只是想解决这个特定问题。
3 回答

UYOU
TA贡献1878条经验 获得超4个赞
确实推荐这样做(对于Python 2.x)。
是否明确将类传递给类super
的问题是样式问题,而不是功能问题。通过该类以super
符合Python的“显式优于隐式”的哲学。

杨__羊羊
TA贡献1943条经验 获得超7个赞
super(X,obj)实际上返回一个特殊的“ super”对象,当您对其进行属性访问时,该对象将返回如果类X根本没有属性,则该属性将被返回。例如,super(X,obj).__ init__将返回obj的init方法,就好像没有X类中的init一样。现在,如果类X有两个父级,并且X .__ init__不存在,则默认行为是仅调用其中一个父级的init,而不是两个父级的init。这实际上是super在做的事情……给您父母之一。
添加回答
举报
0/150
提交
取消