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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top