En python, je veux qu'une classe ait des "constantes" (pratiquement, des variables) qui seront communes à toutes les sous-classes. Existe-t-il un moyen de le faire avec une syntaxe conviviale? En ce moment, j'utilise:
class Animal:
SIZES=["Huge","Big","Medium","Small"]
class Horse(Animal):
def printSize(self):
print(Animal.SIZES[1])
et je me demande s'il existe une meilleure façon de le faire ou une façon de le faire sans avoir à écrire "Animal". avant les tailles. Merci! edit: j'ai oublié de mentionner que le cheval hérite de l'animal.
SIZES
jamais ne change, utilisez définitivement un tuple au lieu d'une liste. Like so("Huge","Big","Medium","Small")
Réponses:
Puisqu'il
Horse
s'agit d'une sous-classe deAnimal
, vous pouvez simplement changeravec
Néanmoins, vous devez vous rappeler que cela
SIZES[1]
signifie «gros», donc vous pourriez probablement améliorer votre code en faisant quelque chose comme:Sinon, vous pouvez créer des classes intermédiaires:
HugeAnimal
,BigAnimal
et ainsi de suite. Ce serait particulièrement utile si chaque classe d'animaux contenait une logique différente.la source
Vous pouvez y accéder au
SIZES
moyen deself.SIZES
(dans une méthode d'instance) oucls.SIZES
(dans une méthode de classe).Dans tous les cas, vous devrez être explicite pour savoir où trouver
SIZES
. Une alternative est de mettreSIZES
dans le module contenant les classes, mais vous devez ensuite définir toutes les classes dans un seul module.la source
la source
En développant la réponse de betabandido, vous pouvez écrire une fonction pour injecter les attributs sous forme de constantes dans le module:
la source
print SIZE_BIG
hors de la classe sera la même chose? Sera-ce modifiableAnimal.SIZE_HUGE = 'Small'
?