首页 > 解决方案 > 获取多级继承类的父级的父级属性

问题描述

让我们想象以下类结构:

class A:
    def t(self):
        print("a")

class B(A):
    def t(self):
        super().t()
        print("b")

我希望从C继承自的类B中仅A.t()使用super关键字运行方法,以便运行

c=C()
c.t()

只会打印

a

有关信息,假设我确实想表现C得像B除了方法t(),它必须完全绕过B.t()来覆盖A.t()

我试过了

class C(B):
    def t(self):
        super().super().t()

返回AttributeError: 'super' object has no attribute 'super'

我也试过

class C(B):
    def t(self):
        A.t()

返回TypeError: t() missing 1 required positional argument: 'self'

显然,我做错了什么。有人可以告诉我如何覆盖第二个父母的方法,同时仍然从第一个父母继承吗?

标签: python

解决方案


您可以重新设计您的类层次结构,以便B两者C都继承自 的公共子类A,该子类实现当前B类实现的每个方法,除了方法t,留给新B类自行实现:

class A:
    def t(self):
        print("a")

class SubA(A):
    def other_method(self):
        pass

class B(SubA):
    def t(self):
        super().t()
        print("b")

class C(SubA):
    pass

推荐阅读