Wenn ich beim Python-Lernen mit dem typischen Point-Class-Beispiel experimentiert habe, ist mir aufgefallen, dass ich aus irgendeinem Grund keine Klassenstufe (statische Variable) vom selben Typ wie die Klasse haben kann. ZB
%Vor%während das gleiche in Java funktioniert:
%Vor%Die Frage ist: Gibt es einen Weg, das Gleiche in Python zu erreichen? Im Moment verlasse ich mich auf Variablen auf Modulebene und ich mag diese Lösung nicht. Gibt es auch einen Grund, warum es nicht im Körper der Klasse getan werden kann?
Sie können keine Instanz einer Klasse erstellen, bis diese Klasse tatsächlich erstellt wurde, dh nachdem der Klassenkörper ausgewertet wurde (Hinweis: Er wird wie normaler Python-Code ausgeführt).
Dasselbe gilt für Ihr Java-Beispiel: ClassLoader erstellt die Klasse Point
und führt dann den Code aus den Feldern static
aus.
Ein ungefähres Äquivalent zu einem Klassenlader in Python ist die Metaklasse, also könnten Sie etwas wie folgt machen:
%Vor% Natürlich hat dies einige andere Konsequenzen, zB: Alle Unterklassen von Point
haben ein eigenes ORIGIN
-Attribut. Du willst es wahrscheinlich einfach so machen wie andere gezeigt:)
Du könntest das mit einem Klassenausstatter machen, obwohl ich nicht sicher bin, wie ein guter Name dafür wäre. Hier ist wie:
%Vor% Obwohl im obigen Code nicht verwendet, können Sie auch Argumente indirekt über den Decorator an den __init__()
-Konstruktor der Klasse übergeben.