首页 > 解决方案 > 覆盖继承的属性设置器(不带 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

(我知道,在引用的问题中发表评论就足够了,但由于声誉问题,我无权提问。)

标签: pythonpython-3.xoopinheritance

解决方案


推荐阅读