Ich weiß, dass Python Enums machen kann (gut so), aber die Art der Enums ist sehr primitiv. Zum Beispiel kann ich dies tun:Klassenvariable als Instanz der umschließenden Klasse
from enum import Enum
class Color(Enum):
BLACK = 'black'
WHITE = 'white'
print(Color.BLACK.value)
Das ist in Ordnung, aber was ist, wenn ich jede Farbe wünschen einen Namen und einen Hex-Wert haben? Ich habe mehrere Möglichkeiten (wie die Enum-Werte Wörterbücher zu machen), aber ich bevorzuge die Art, wie Java enums macht. In Java dürfen Enums Felder und Methoden wie eine Klasse haben. So normal, wenn nur eine Sprache einfach Aufzählungen wie im obigen Beispiel unterstützt, restrukturieren ich den Code ähnlich dem folgenden:
class Color(object):
BLACK = Color('black', '#000')
WHITE = Color('white', '#fff')
def __init__(self, name, hex):
self.name = name
self.hex = hex
print(Color.BLACK.name + ' ' + Color.BLACK.hex)
Jetzt kann ich mehrere Werte, kundenspezifische Methoden und da jeder auf die verschiedenen Felder nach Namen verweisen Farbe ist ein Objekt. Ich habe das in mehreren Sprachen ohne Problem gemacht, aber Python scheint sich zu beklagen, dass "Name 'Farbe' nicht definiert ist". Kann ich keine Instanz einer Klasse in dieser Klasse erstellen? Meine hacky Lösung ist dies zu tun:
class Color(object):
def __init__(self, name, hex):
self.name = name
self.hex = hex
Color.BLACK = Color('black', '#000')
Color.WHITE = Color('white', '#fff')
print(Color.BLACK.name + ' ' + Color.BLACK.hex)
Was funktioniert gut. Meine Frage ist, warum sind die Felder innerhalb der Klasse nicht erlaubt? Kann ich etwas hinzufügen oder umstrukturieren, um es zu erlauben? Vielen Dank im Voraus für die Antworten!
Nun Python muss eine 'Color' Klasse aufbauen, mit dem Argument' BLACK = Color ('black', '# 000') '. Aber zu dieser Zeit ist 'Color' noch nicht definiert. Es ist also wie das "* Huhn und das Ei *" - Problem. –