En python, quiero que una clase tenga algunas "constantes" (prácticamente variables) que serán comunes en todas las subclases. ¿Hay alguna manera de hacerlo con una sintaxis amigable? Ahora mismo uso:
class Animal:
SIZES=["Huge","Big","Medium","Small"]
class Horse(Animal):
def printSize(self):
print(Animal.SIZES[1])
y me pregunto si hay una mejor manera de hacerlo o una manera de hacerlo sin tener que escribir "Animal". antes de los tamaños. ¡Gracias! editar: olvidé mencionar que el caballo hereda de los animales.
SIZES
nunca cambia, definitivamente use una tupla en lugar de una lista. Me gusta así("Huge","Big","Medium","Small")
Respuestas:
Como
Horse
es una subclase deAnimal
, solo puedes cambiarcon
Aún así, debe recordar que
SIZES[1]
significa "grande", por lo que probablemente podría mejorar su código haciendo algo como:Como alternativa, puede crear clases intermedias:
HugeAnimal
,BigAnimal
y así sucesivamente. Eso sería especialmente útil si cada clase de animales contendría una lógica diferente.fuente
Puede acceder
SIZES
medianteself.SIZES
(en un método de instancia) ocls.SIZES
(en un método de clase).En cualquier caso, tendrá que ser explícito sobre dónde encontrar
SIZES
. Una alternativa es colocarSIZES
el módulo que contiene las clases, pero luego debe definir todas las clases en un solo módulo.fuente
fuente
Ampliando la respuesta de betabandido, podría escribir una función para inyectar los atributos como constantes en el módulo:
fuente
print SIZE_BIG
fuera de clase será lo mismo? ¿Será editableAnimal.SIZE_HUGE = 'Small'
?