In Python möchte ich, dass eine Klasse einige "Konstanten" (praktisch Variablen) hat, die in allen Unterklassen gemeinsam sind. Gibt es eine Möglichkeit, dies mit benutzerfreundlicher Syntax zu tun? Im Moment benutze ich:
class Animal:
SIZES=["Huge","Big","Medium","Small"]
class Horse(Animal):
def printSize(self):
print(Animal.SIZES[1])
und ich frage mich, ob es einen besseren Weg gibt, es zu tun oder einen Weg, es zu tun, ohne dann "Animal" schreiben zu müssen. vor den Größen. Vielen Dank! bearbeiten: vergessen zu erwähnen, dass Pferd von Tier erbt.
SIZES
nichts ändert, verwenden Sie auf jeden Fall ein Tupel anstelle einer Liste. Wie so("Huge","Big","Medium","Small")
Antworten:
Da
Horse
es sich um eine Unterklasse von handeltAnimal
, können Sie diese einfach ändernmit
Sie müssen sich jedoch daran erinnern, dass
SIZES[1]
dies "groß" bedeutet. Wahrscheinlich können Sie Ihren Code verbessern, indem Sie Folgendes tun:Alternativ können Sie Zwischenklassen schaffen:
HugeAnimal
,BigAnimal
, und so weiter. Das wäre besonders hilfreich, wenn jede Tierklasse eine andere Logik enthält.quelle
Sie können erhalten
SIZES
mittelsself.SIZES
(in einer Instanz - Methode) odercls.SIZES
(in einer Klassenmethode).In jedem Fall müssen Sie explizit angeben, wo Sie zu finden sind
SIZES
. Eine Alternative besteht darin,SIZES
das Modul mit den Klassen einzufügen. Anschließend müssen Sie alle Klassen in einem einzigen Modul definieren.quelle
quelle
Wenn Sie die Antwort von betabandido erweitern, können Sie eine Funktion schreiben, um die Attribute als Konstanten in das Modul einzufügen:
quelle
print SIZE_BIG
außerhalb der Klasse wird das gleiche sein? Wird es editierbar seinAnimal.SIZE_HUGE = 'Small'
?