以下 python-3.x 代码出错。我的问题是
class Parent(object):
def __init__(self, v):
self.val = v # [1] use the setter.
@property
def val(self):
return self._val
@val.setter
def val(self, v):
self._val = v
class Child(Parent):
def __init__(self, v):
super().__init__(v)
@property
def val(self):
return super().val
@val.setter
def val(self, v): # override parent's setter
super().val = v # [2] super() to use parent's setter
a = Child(0)
这以错误结束
AttributeError: 'super' object has no attribute 'val'
.
我发现的解决方法是: 1按照派生类中的属性被覆盖,如何调用基类的属性?解决方案,显式调用get,set等
这似乎可行。上面的代码将是;
@property
def val(self):
return super(Child, self.__class__).val.__get__(self)
@val.setter
def val(self, v): # override parent's setter
super(Child, self.__class__).val.__set__(self, v)
Overriding 是派生类的基本用途之一,setter/getter 的使用是为了使您的代码直观。但这里的解决方案远非直观。任何 pythonic 解决方案?