python - 在子类中覆盖时使用父属性设置器
问题描述
我有一种情况,我只覆盖属性上的设置器:
class Parent:
@property
def x(self):
return self.__dict__['x']
@x.setter
def x(self, val):
self.__dict__['x'] = f'P{val}'
class Child(Parent):
@Parent.x.setter
def x(self, val):
super().x = val
print('all set')
这里的 print 语句代表了我在调用父级的 setter 后想要做的处理。你可以忽略它。super().x = y
是我调用所说的二传手的原生尝试。它失败了
Attribute error: 'super' object has no attribute 'x'
在子类中使用父类的属性设置器的正确方法是什么?
我宁愿避免以下情况,即使它工作得很好,因为它涉及显式调用 dunder 方法:
Parent.x.__set__(self, val)
作为奖励,有没有什么方法可以super()
在儿童二传手的身体中使用?
解决方案
您可以使用该属性的fset函数:
class Child(Parent):
@Parent.x.setter
def x(self, val):
Parent.x.fset(self, val)
print('all set')
推荐阅读
- javascript - 溢出正在父 div 后面发送下拉列表,z-index 不起作用
- python - 如何将此函数转换为 python 中的列表理解?
- r - 使用 ggraph 绘制双连词共现时出现问题,某些行不显示
- json - Angular4中的嵌套JSON循环
- postgresql - PostgreSQL 安装在 5432 端口
- swift - SwiftSoup 将正文中的文本包装到 div
- excel - Excel 中的 ActiveX 文本框在失去焦点时闪烁旧值
- ignite - Apache Ignite CacheConfiguration 对每个数据集重复吗?
- javascript - 类型“{}”上不存在属性“名称” - Angular
- php - 无法在 Google 地图中显示来自 PHP 的坐标