在多级继承中使用super

时间:2017-09-07 02:24:26

标签: python python-3.x

我的代码如下:

class A():
    def something():
        #Do something

class B(A):
    def something():
        super(B, self).something()
        #Do something

class C(B):
    def something():
        if VeryRareSpecificCase:
            super(super(C,self)).something()
        else:
            super(C, self).something()
        #Do something

然而,它引发错误TypeError:必须是type,而不是super。

1 个答案:

答案 0 :(得分:1)

如果您没有使用复杂的钻石继承,您可以使用这种方法跳过链中的父级:

class C(B):
    def something(self):
        if VeryRareSpecificCase:
            super(B, self).something()  # <-- note: B passed explicitly!
        else:
            super().something()

如果你真的只有C --> B --> A --> object,如你的MCVE所示,这应该是安全的。但是,如果您有比这更复杂的事情,您必须直接使用mro并准确指定您需要手动执行的操作。