python - 获取多级继承类的父级的父级属性
问题描述
让我们想象以下类结构:
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'
。
显然,我做错了什么。有人可以告诉我如何覆盖第二个父母的方法,同时仍然从第一个父母继承吗?
解决方案
您可以重新设计您的类层次结构,以便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
推荐阅读
- reactjs - 我怎么能在 useState React 中发送 setStateAction
- ruby-on-rails - 如何使用 Hotwire 和 Turbo.js 访问 current_user 助手?
- python - Google Places API,如何获得下 20 个结果?
- r - 如何使用变量作为ggplot的参数?
- javascript - 从选择元素中选择选项时,控制台日志加倍
- javascript - 使用 JavaScript 获取 textarea 值并将其插入到地图上
- ios - 如何在烛台图表的蜡烛顶部和底部绘制自定义视图
- sql - 访问数据库。VBA 查询
- objective-c - 如何用同一个对象(NSString)填充整个 NSMutableArray
- spring-boot - 如何在 feign client spriong Boot 中设置值