super在多级继承中的应用

2024-10-02 12:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码如下:

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。在


Tags: 代码selfifdeftype错误doelse
1条回答
网友
1楼 · 发布于 2024-10-02 12:23:09

如果不使用复杂的菱形继承,则可以使用以下方法跳过链中的父级:

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并精确地指定您需要手动执行的行为。在

相关问题 更多 >

    热门问题