如果我在基类中定义一个属性(带有@property),我如何在子类中覆盖此属性的setter?
更具体地说:
如果我创建了一个A类:
class A(object):
def __init__(self, val):
self._val = val
@property
def val(self):
return self._val
@val.setter
def val(self, value):
self._val = value
并创建A
的子类B.class B(A):
def __init__(self, val):
super(B, self).__init__(val)
如何防止在B上调用setter?
有没有办法写出相当于:
class B(A)
def __init__(self, val):
super(B, self).__init__(val)
@val.setter
def val(self, value):
raise ValueError("cannot set value on B")
实际上,上面的代码会引发:
NameError: name 'val' is not defined
是否有必要在B中重新定义thre getter才能使其正常工作?
如果我写:
class B(A):
def __init__(self, val):
super(B, self).__init__(val)
@property
def val(self):
return self._val
@val.setter
def val(self, value):
raise AttributeError("cannot set val of B")
一切正常...... 有没有解决办法?