如何使用派生类中的属性覆盖基类中的字段?

Eri*_*ric 5 python overriding properties

我有一个使用字段的基类:

class Base(object):
    def __init__(self, member):
        self.member = member
Run Code Online (Sandbox Code Playgroud)

以及想要将其提升为属性并添加一些行为的派生类:

class Derived(Base):
    @property
    def member(self):
        return super(Derived, self).member

    @member.setter
    def member(self, value):
        print "intercepting setter"
        super(Derived, self).member = value
Run Code Online (Sandbox Code Playgroud)

但是,这并没有正确地委托给基类:

>>> d = Derived(0)
intercepting setter

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    d = Derived(0)
  File "<pyshell#3>", line 3, in __init__
    self.member = 2
  File "<pyshell#6>", line 9, in member
    super(Derived, self).member = value
AttributeError: 'super' object has no attribute 'member'
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Che*_*wie 3

member您试图像访问类属性一样访问超级属性。尝试使用:

class Derived(Base):
    @property
    def member(self):
        print "intercepting getter"
        return self._member

    @member.setter
    def member(self, value):
        print "intercepting setter"
        self._member = value
Run Code Online (Sandbox Code Playgroud)