Python-Instanzvariablen als optionale Argumente

7

Gibt es in Python eine Möglichkeit, Instanzvariablen als optionale Argumente in einer Klassenmethode zu verwenden? zB:

%Vor%

Jede Hilfe wäre willkommen.

    
Paul Woolcock 15.05.2009, 05:40
quelle

5 Antworten

14

Versuchen Sie Folgendes:

%Vor%     
Unknown 15.05.2009, 05:45
quelle
5

Alle Antworten, die None vorschlagen, sind korrekt. Wenn Sie sicherstellen möchten, dass ein Aufrufer None als reguläres Argument übergeben kann, verwenden Sie ein spezielles sentinel und testen Sie mit is :

%Vor%

Jeder Aufruf von object() erzeugt ein eindeutiges Objekt, so dass is zwischen diesem und einem anderen Wert niemals erfolgreich ist. Die zwei Unterstriche in __default bedeuten "stark privat", was bedeutet, dass Anrufer wissen, dass sie nicht versuchen sollten, sich damit herumzuärgern (und dafür einiges an Arbeit benötigen würden, indem sie explizit den Namensmangel des Compilers nachahmen) / p>

Der Grund, warum Sie den von Ihnen geposteten Code nicht einfach verwenden können, ist, dass Standardwerte ausgewertet werden, wenn die def -Anweisung auswertet, nicht später zum Zeitpunkt des Anrufs; und zu dem Zeitpunkt, an dem def auswertet, gibt es noch kein self , von dem die Instanzvariable genommen werden soll.

    
Alex Martelli 15.05.2009 07:51
quelle
2

nein, weil die Instanz nicht existiert, wenn die Definitionszeit der Klassenfunktion

ist

Sie müssen wie folgt umschreiben

%Vor%

Das ist etwas anders als das Original: Sie können arg3 mit None nicht übergeben, wenn Sie es wirklich wollen.

Alternative Lösung:

%Vor%     
kcwu 15.05.2009 05:47
quelle
0
%Vor%

Dies funktioniert mit Python 2.5 und leitet und behandelt die Fälle, in denen blah leere Strings, Listen usw. ist.

    
vogonistic 26.01.2010 20:27
quelle
-1

Eine alternative Vorgehensweise wäre:

%Vor%

Diese kürzere Version sieht besser aus, besonders wenn es mehr als ein optionales Argument gibt.

Vorsichtig verwenden. Siehe die Kommentare unten ...

    
Sergio 15.05.2009 05:53
quelle

Tags und Links