the getter and setter are stored as attributes of the property
object (respectively as .fget
and .fset
), so as soon as you overload the property in a child class you most explicitely provide both getter and setters, ie:
class B(A):
@property
def mode(self):
return self._mode
@mode.setter
def mode(self, value):
self._mode = value
So if you want to make the getter and/or setter overloadable without having to redeclare the property, you have to define a _get_mode
method and make your property's getter delegate to this method, just like you did for the setter.
class A(object):
def __init__(self):
self._mode = None
@property
def mode(self):
return self._get_mode()
def _get_mode(self):
# to be overriden in subclass to implement the actual getter code
raise NotImplementedError
@mode.setter
def mode(self, value):
# common assertions and input validations
self._set_mode(value)
def _set_mode(self, value):
# to be overriden in subclass to implement the actual setter code
raise NotImplementedError
class B(A):
def _get_mode(self):
return self._mode
def _set_mode(self, value):
self._mode = value
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…