If I define a property (with @property) in a base class, how can I override the setter of this property in a subclass ?
more specifically:
if I create a class 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
and create a sub-class B of A
class B(A):
def __init__(self, val):
super(B, self).__init__(val)
how can I prevent the setter from being called on B ?
Is there any way to write the equivalent of:
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")
Actually, the code above would raise a:
NameError: name 'val' is not defined
Is it necessary to re-define thre getter in B for this to work?
If I write:
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")
all works fine... Is there any work-around?