Gibt es eine Möglichkeit, schreibgeschützte Klasseneigenschaften in Python zu erstellen? Ex. In Unity3d können Sie dies tun:
%Vor%Vector3.zero gibt eine Instanz der Vector3-Klasse zurück, wobei x, y und z 0 sind. Dies ist im Grunde dasselbe wie:
%Vor%Ich habe versucht, so etwas zu tun:
%Vor%Aber ich bekomme einen undefinierten Variablenfehler, weil die Klasse noch nicht definiert wurde. Also, wie machen Sie schreibgeschützte Klasseneigenschaften, die keine Instanz der Klasse erfordern?
Der offensichtlichste Weg könnte sein, das Klassenobjekt nachträglich zu ändern:
%Vor%Das Hauptproblem dabei ist, dass es dann nur noch ein Objekt von Null gibt, und wenn es veränderbar ist, können Sie überall Unfallschäden verursachen. Es kann einfacher (und weniger hacky) sein, einen dynamischen Deskriptor zu verwenden, der jedes Mal, wenn auf ihn zugegriffen wird, einen Nullvektor erzeugt (dies geschieht durch Erstellen eines ClassProperty Klasse):
%Vor%Ich halte jedoch keines davon für wirklich "pythonisch". Betrachten Sie die anderen mathematischen Typen in Python: Ints, Floats und komplexe Zahlen. Keiner von diesen hat ein "Null" -Klassenattribut oder einen Zero-Konstruktor, stattdessen geben sie null zurück, wenn sie ohne Argumente aufgerufen werden. Vielleicht sollte es also am besten sein:
%Vor%Dies ist weniger wie Unity3D und eher wie Python, wenn Sie wissen, was ich meine.
Verwenden Sie einen Deskriptor :
%Vor%Sollte tun, was Sie wollen:
%Vor%Was Sie sich vorstellen, ist möglich, aber in diesem Fall nicht notwendig. Warte einfach, bis deine Klasse das Attribut
zugewiesen hat %Vor%oder machen Sie es zu einer Modul-Level-Konstante.
Es besteht eine gute Chance, dass Sie einfach ein Formular (3,)
numpy Array verwenden, anstatt diese Klasse zu schreiben, für irgendwelche praktischen Zwecke.
Das ist eine wirklich interessante Frage, die Problemumgehung, mit der ich fortfahren würde, ist eine Klassenmethode als "Getter" für das Null-Objekt zu machen:
%Vor%Was den schreibgeschützten Teil betrifft, ist dies eine gute Ressource.
> %Vor%Tags und Links python properties