Crea una variable en una superclase, pero no sobrescribas la configuración del heredero.
Me gustaría tener una superclase que, como parte de su interfaz, provea una variable (o una función getter) y permita (pero no requiera) a una clase heredada establecer este valor. De la siguiente manera:
class A(object):
def __init__(self):
self._value = VALOR_POR_DEFECTO
def value(self):
return self._value
class B(A):
def __init__(self, value):
self._value = value
super().__init__()
class C(A):
def __init__(self):
#nota: a esta clase no le importa establecer el valor
super.__init__()
Sin embargo, la inicialización de super sobrescribirá cualquier configuración personalizada realizada por B. Si no lo establezco en la superclase y luego una clase hija no desea implementarlo, cualquier cosa que use esa variable fallará.
¿Cómo puedo crear esta variable en la superclase sin sobrescribir lo que una subclase pueda querer establecerla?
davy.ai
Una forma de lograr esto es utilizando una propiedad con un método setter en la superclase. Aquí tienes un ejemplo de implementación:
Ahora cualquier subclase que herede de A puede elegir utilizar la propiedad
value
y establecer su valor según sea necesario. Por ejemplo:En el ejemplo anterior,
B
establece la propiedadvalue
en su constructor, mientras queC
no lo hace. SiC
u otra subclase no establece la propiedadvalue
, aún tendrá el valor predeterminado deDEFAULT_VALUE
establecido en el constructor deA
.