2016-12-14 3 views
0

Was ist die gute Praxis in Python, wenn ich eine Objekte initialisieren muss, die zum Beispiel große Array enthält und es sollte mit berechneten Werten während der Objekterstellung gefüllt werden. Ist es in Python in Ordnung, dies innerhalb des Konstruktors zu tun, oder ist das wie ein Code-Geruch und ich sollte stattdessen Factory verwenden? Was ist der pythonische Weg hier?Schwere Objekte Initialisierung in Python

+0

Ist der Inhalt des Arrays konstant oder erhält jede Instanz des Objekts ein eindeutiges Array? FWIW, diese Frage wird wahrscheinlich als "primär meinungsbezogen" abgeschlossen. Angenommen, jede Instanz erhält ein eindeutiges Array, würde ich sie direkt in "__init__" initialisieren, wenn dies in einer oder zwei Zeilen möglich ist. Andernfalls würde ich eine andere Methode aufrufen, um sie zu initialisieren. –

+0

- jede Instanz des Objekts erhält ein eindeutiges Array, dessen Größe und Inhalt während der Objekterstellung berechnet wird. In C# würde ich die statische Methode CreateX für diese Objekterstellung erstellen und den Konstruktor ausblenden, aber in Python gibt es keine privaten Konstruktoren, daher bin ich sicher. – Brans

+0

Haben Sie vor, die Klasse der erstellten Objekte transparent ändern zu können? Wenn ja, mit dem Fabrikmuster gehen. Ansonsten würde ich überlegen, ob der Code sauberer (besser lesbar) wäre, wenn die Berechnungen in die Factory-Klasse ausgelagert würden. – abukaj

Antwort

1

Wenn Sie das Array in ein paar Zeilen mit klarem Code initialisieren können, ist es in Ordnung, es direkt in der __init__ Methode zu initialisieren. Andernfalls initialisieren Sie es in einer separaten Methode.

Python hat statische Methoden und Klassenmethoden (für einige einfache Beispiele siehe here). Sie könnte eine statische Methode verwenden, um Ihr Array zu initialisieren, aber wenn die Initialisierungsmethode Attribute der Instanz in seiner Berechnung verwendet, können Sie es auch eine normale Methode machen, andernfalls müssen Sie diese Werte als Parameter übergeben.

Python hat keine privaten Methoden, aber es ist konventionell zu zeigen, dass eine Methode für den privaten Gebrauch der Klasse ist, indem sie einen Namen erhält, der mit einem einzelnen führenden Unterstrich beginnt, zB _init_my_array. Wenn ein Benutzer Ihrer Klasse diese Methode aufrufen möchte, weiß er, dass dies zu einem Fehlverhalten der Klasse führen kann und dass es im Allgemeinen keine gute Idee ist, solche "privaten" Methoden aufzurufen, wenn Sie nicht genau wissen, was Sie tun .