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.

SIZESnunca cambia, definitivamente use una tupla en lugar de una lista. Me gusta así("Huge","Big","Medium","Small")Respuestas:
Como
Horsees 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,BigAnimaly así sucesivamente. Eso sería especialmente útil si cada clase de animales contendría una lógica diferente.fuente
Puede acceder
SIZESmedianteself.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 colocarSIZESel 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_BIGfuera de clase será lo mismo? ¿Será editableAnimal.SIZE_HUGE = 'Small'?