So weisen Sie Instanzvariablen als Standardwerte für Schlüsselwortargumente in derselben Klasse in Python zu
-
20-12-2019 - |
Frage
In Python 3.3+ hat eine Klasse mit einer Methode eine Instanzvariable, die ein einfaches object() -Objekt ist (wir nennen es self .FALSCH).Wie verwende ich diese Instanzvariable als Standardwert für ein Schlüsselwortargument?
class Test:
def __init__(self):
self.FALSE=object();
def Tester(self, key=self.FALSE):
pass;
Dies funktioniert natürlich nicht, da der Gültigkeitsbereich der Standardwerte für Schlüsselwortargumente weder self (noch die Testklasse im Allgemeinen).Es enthält jedoch globale Variablen und zumindest einige Objekte.
Gibt es eine Möglichkeit, dies zu tun?Ich habe im Moment kein dringendes Bedürfnis, aber es wäre wirklich schön, wenn ich das irgendwie tun könnte.Ich würde denken, dass Sie in der Lage wären, alles als Standardwert für Schlüsselwortargumente zu übergeben.Sicher muss es einen Weg geben.
Lösung
Haben Sie anfangs den Standardwert von value key
als None
und in der Funktion, wenn key
is None
, dann können Sie den Standardwert festlegen, was immer Sie möchten.
def Tester(self, key=None):
if key is None:
key = self.FALSE
Außerdem benötigen Sie in Python keine Semikolons, wie wir sie in C / C ++ / JAVA benötigen.
Andere Tipps
Es gibt keinen Weg, da Instanzattribute nicht vorhanden sind, wenn eine Instanz erstellt wird, aber die Methoden sind definiert, wenn die Klasse erstellt wird, bevor die Instanzen vorhanden sind.Das heißt, (wie Sie in Ihrer Frage tun), dass "die Klasse eine Instanzvariable" ist, ist falsch.Die Klasse hat keine solche;Nur die Instanzen haben diese Variable und nur wenn und wann sie erstellt werden.
Sie müssen tun, wenn TheFourTheye vorschlägt und den Zuweisen eines Standards in der Methodenkörper zuweisen.