Wenn ich reguläre Methoden zum Aufrufen einer anderen Methode in einer Klasse habe, muss ich dies tun
class test:
def __init__(self):
pass
def dosomething(self):
print "do something"
self.dosomethingelse()
def dosomethingelse(self):
print "do something else"
aber wenn ich statische Methoden habe, kann ich nicht schreiben
self.dosomethingelse()
weil es keine Instanz gibt. Wie muss ich in Python vorgehen, um eine statische Methode von einer anderen statischen Methode derselben Klasse aufzurufen?
Edit: was für ein Durcheinander. Ok, ich habe die Frage auf die ursprüngliche Frage zurückgesetzt. Ich habe bereits die Antwort auf die zweite Frage in Peter Hansens Kommentar. Wenn Sie denken, ich sollte eine andere Frage für eine Antwort öffnen, die ich bereits habe, sagen Sie mir bitte.
python
static-methods
Pablo
quelle
quelle
Antworten:
class.method
sollte arbeiten.quelle
quelle
Test.static_method_to_call()
sollte auch mit anderen nicht statischen und nicht klassenbezogenen Methoden dieser Klasse funktionieren, oder? (... und wahrscheinlich auch andere Klassen?)Test.static_method_to_call()
wird von überall funktionieren.HINWEIS - anscheinend hat sich die Frage geändert. Die Antwort auf die Frage, wie Sie eine Instanzmethode von einer statischen Methode aus aufrufen, lautet, dass Sie dies nicht können, ohne eine Instanz als Argument zu übergeben oder diese Instanz innerhalb der statischen Methode zu instanziieren.
Was folgt, ist hauptsächlich die Antwort "Wie ruft man eine statische Methode von einer anderen statischen Methode auf":
Beachten Sie, dass es ist ein Unterschied zwischen statischen Methoden und Klassenmethoden in Python. Eine statische Methode verwendet kein implizites erstes Argument, während eine Klassenmethode die Klasse als implizites erstes Argument verwendet (normalerweise
cls
gemäß Konvention). In diesem Sinne würden Sie das folgendermaßen tun:Wenn es sich um eine statische Methode handelt:
Wenn es eine Klassenmethode ist:
quelle
cls.dosomethingelse()
innerhalb der Klassendefinition verwenden.cls.dosomethingelse()
innerhalb der Klassenmethode selbst verwenden. Genau wie Sie nurself
innerhalb einer Instanzmethode selbst verwenden können.OK, der Hauptunterschied zwischen Klassenmethoden und statischen Methoden ist:
quelle
Sie können nicht statische Methoden nicht von statischen Methoden aufrufen, aber indem Sie eine Instanz innerhalb der statischen Methode erstellen ... sollte dies so funktionieren
hoffe das hilft dir :)
quelle
@classmethod
das Deklarieren Ihrer Methoden und das Verwenden voncls.dosomethingelse()
insidecls.dosomething()
- schlechter in Bezug auf Leistung (Instanziieren von Objekten, nur um Zugriff auf eine statische Methode zu erhalten) und Lesbarkeit (es ist nicht einfach, und ich stelle mir vor, ob dies der Fall ist von Muster wurde Boilerplate, die gesamte Codebasis könnte für einen bloßen Menschen ziemlich schwierig zu analysieren werden)Wenn diese nicht von der Klasse oder Instanz abhängen, warum machen Sie sie dann nicht einfach zu einer Funktion? Da scheint dies die naheliegende Lösung zu sein. Es sei denn, Sie glauben natürlich, dass es überschrieben werden muss, Unterklasse usw. Wenn ja, dann sind die vorherigen Antworten die beste Wahl. Daumen drücken Ich werde nicht dafür markiert, dass ich nur eine alternative Lösung anbiete, die möglicherweise den Bedürfnissen eines Menschen entspricht oder nicht;).
Da die richtige Antwort vom Anwendungsfall des betreffenden Codes abhängt;) Viel Spaß
quelle