Ich habe Probleme mit der Implementierung eines Borg in Python. Ich fand ein Beispiel in einer Antwort auf diese Frage , aber es funktioniert nicht für mich, es sei denn, ich verpasse etwas. Hier ist der Code:
%Vor%Ich nehme an, das soll "Hallo" drucken, aber für mich druckt es nur eine leere Zeile. Irgendwelche Ideen, warum das sein könnte?
Es sieht so aus, als ob es eher zu gut funktioniert: -)
Das Problem besteht darin, dass die Zuweisung self.__myvalue = ""
in __init__
den Wert von myvalue
immer dann ignoriert, wenn ein neuer Borg erstellt wird. Sie können dies sehen, wenn Sie Ihrem Test einige zusätzliche print-Anweisungen hinzufügen:
Entferne die self.__myvalue
und alles wird gut.
Nachdem das gesagt wurde, ist die Implementierung von myvalue()
etwas seltsam. Besser, würde ich sagen, explizite Getters und Setter verwenden Eigenschaften. Sie möchten auch, dass ein bestimmter Code in __init__
den Wert von myvalue
initialisiert, wenn er noch nicht existiert, oder zumindest damit umgehen, dass er möglicherweise nicht im Getter existiert. Vielleicht etwas wie:
Kombiniert die Entfernung von self.__myvalue = ""
mit dem Borg im neuen Stil und den Vorschlägen zur Vermeidung von __
in Variablennamen erhalten wir:
Das Problem scheint darin zu liegen, dass init () myvalue auf eine leere Zeichenkette zurücksetzt. Wenn ich diese Zeile entferne, bekomme ich die erwartete Ausgabe.
Ich habe versucht, dies sowohl mit dem "alten Stil" als auch mit dem "neuen Stil" zu implementieren, und ich kann keinen Unterschied zwischen ihnen erkennen. Gibt es einen Vorteil gegenüber dem anderen? Oder sind diese grundsätzlich gleichwertig?
%Vor%Tags und Links python design-patterns