python - 覆盖继承的属性设置器(不带 fset)
问题描述
这个问题来自于阅读Overriding an hidden property setter的答案。假设我有基Person
类的情况:
class Person:
def __init__(self, name):
self.name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
在投票最多的答案之后,覆盖设置器的正确方法是:
class Superhero(Person):
def __init__(self, name):
super().__init__(name)
@Person.name.setter
def name(self, value):
Person.name.fset(self, "Super " + value)
Superhero
相反,如果类直接更新_name
属性,会有区别吗?IE
class Superhero(Person):
def __init__(self, name):
super().__init__(name)
@Person.name.setter
def name(self, value):
self._name = "Super " + value
(我知道,在引用的问题中发表评论就足够了,但由于声誉问题,我无权提问。)
解决方案
推荐阅读
- python - Putting .exe file in windows autorun with python
- php - AWS::ElasticBeanstalk::ConfigurationTemplate 的 AWS CloudFormation 模板失败
- regex - VSCode Regex 在文件中查找/替换:无法获得编号的捕获组,后跟数字来解决
- javascript - Mongoose,$从嵌套数组中拉出一个元素并根据元素的存在更新文档
- visual-studio-code - 无论如何可以通过工作区设置(.code-workspace)控制启用/禁用哪些扩展
- android - Adapter Class Android中的片段到片段事务
- javascript - 如何从文件中导入 JS 和 HTML?
- mysql - mysql8:使用introducer时服务器收到语句后应该翻译成什么字符集?
- flutter - ListView Builder 上的 Flutter 禁用按钮
- dsl - 我可以用 JetBrains MPS 中生成的 DSL 语言做什么?