Python-Borg-Musterproblem

7

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?

    
chrism1 14.04.2009, 14:17
quelle

6 Antworten

13

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:

%Vor%

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:

%Vor%     
Jarret Hardie 14.04.2009, 14:33
quelle
4

Kombiniert die Entfernung von self.__myvalue = "" mit dem Borg im neuen Stil und den Vorschlägen zur Vermeidung von __ in Variablennamen erhalten wir:

%Vor%     
Hank Gay 14.04.2009 14:43
quelle
1

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.

    
Dave Costa 14.04.2009 14:32
quelle
1
%Vor%     
Daniel 31.01.2011 23:12
quelle
0
%Vor%     
Nilesh Nikumbh 09.04.2011 04:21
quelle
0

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%     
Jason Martens 04.12.2014 01:11
quelle

Tags und Links