Em python, eu quero que uma classe tenha algumas "constantes" (praticamente variáveis) que serão comuns em todas as subclasses. Existe uma maneira de fazer isso com sintaxe amigável? Agora eu uso:
class Animal:
SIZES=["Huge","Big","Medium","Small"]
class Horse(Animal):
def printSize(self):
print(Animal.SIZES[1])
e estou me perguntando se existe uma maneira melhor de fazê-lo ou uma maneira de fazê-lo sem ter que escrever "Animal". antes dos tamanhos. Obrigado! editar: esqueceu de mencionar que o cavalo herda de animal.
SIZES
nunca mudar, use definitivamente uma tupla em vez de uma lista. Como assim("Huge","Big","Medium","Small")
Respostas:
Como
Horse
é uma subclasse deAnimal
, você pode simplesmente mudarcom
Ainda assim, você deve se lembrar que
SIZES[1]
significa "grande", então provavelmente você pode melhorar seu código fazendo algo como:Alternativamente, você pode criar classes intermediárias:
HugeAnimal
,BigAnimal
e assim por diante. Isso seria especialmente útil se cada classe de animais contiver uma lógica diferente.fonte
Você pode acessá-lo
SIZES
por meio deself.SIZES
(em um método de instância) oucls.SIZES
(em um método de classe).De qualquer forma, você terá que ser explícito sobre onde encontrar
SIZES
. Uma alternativa é colocarSIZES
o módulo que contém as classes, mas você precisa definir todas as classes em um único módulo.fonte
fonte
Expandindo a resposta do betabandido, você pode escrever uma função para injetar os atributos como constantes no módulo:
fonte
print SIZE_BIG
fora da aula será o mesmo? Será editávelAnimal.SIZE_HUGE = 'Small'
?