Den Aufruf nicht-statische Methode aus statischer man in Python
Kann ich nicht finden, ob es möglich ist, rufen Sie eine nicht-statische Methode aus einer statischen eine in Python.
Dank
BEARBEITEN:
Ok. Und was ist mit static von static? Kann ich dies tun:
class MyClass(object):
@staticmethod
def static_method_one(cmd):
...
@staticmethod
def static_method_two(cmd):
static_method_one(cmd)
- Sicherlich kann man aufrufen einer statischen Methode von einer anderen. Ich meine, Sie müssen ,wenn Sie nicht anrufen können, nicht statisch von einem statischen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist durchaus möglich, aber nicht sehr aussagekräftig. Denken Sie über die folgende Klasse:
Offensichtlich, wir nennen dies in der erwarteten Weise:
Aber auch dies:
Die syntax
instance.normal_method()
ist ziemlich einfach nur eine "Abkürzung" fürMyClass.normal_method(instance)
. Das ist, warum gibt es diese "self" - parameter in Methoden, der pass selbst. Der name selbst ist nicht magisch, Sie können es nennen, was Sie wollen.Den gleichen trick ist gut möglich, von innerhalb einer statischen Methode. Sie können rufen Sie die normale Methode mit einer Instanz als ersten parameter, etwa so:
Also die Antwort ist ja, man kann cal nicht-statische Methoden aus statischen Methoden. Aber nur, wenn du passieren kann in einer Instanz als ersten parameter. So haben Sie entweder zu generieren, die es aus dem inneren der statischen Methode (und in diesem Fall sind Sie wahrscheinlich besser dran mit einem Klasse-Methode), oder übergeben Sie es in. Aber wenn Sie pass in die Instanz, Sie können in der Regel nur machen es zu einem normalen Verfahren.
So können Sie, aber es ist ziemlich sinnlos.
Und dann stellt sich die Frage: Warum wollen Sie das?
Nachdem die anderen Antworten und Ihr follow-up-Frage - bezüglich statische Methode aus statischer Methode: ja, Sie können:
Und falls du neugierig bist, ja auch für die Methode der Klasse aus der class-Methode (leicht zu testen, das Zeug in die Dolmetscher - all das Ausschneiden und einfügen von Leerlauf in 2.5.2)
[**EDITED to make correction in usage pointed out by others**]
:cls.class_method_two(x)
; das zeigt auch, warum der OP verwenden sollteclassmethod
, nichtstaticmethod
.MyClass
dann gibt es wenig Sinn, im Vorbeigehen in der Unterklasse (als classmethod würde).Verwenden Sie Klassen-Methoden, nicht statischen Methoden. Warum sonst legte es in eine Klasse?
Wenn in einer statischen Methode, die Sie nicht haben, eine selbst-Instanz: das, was Objekt werden Sie den Aufruf der nicht-statischen Methoden? Sicherlich, wenn Sie eine Instanz haben, die herumliegen, können Sie rufen Sie die Methoden auf.
Es ist nicht möglich withotut die Instanz der Klasse. Man könnte hinzufügen, ein param Ihrer Methode
f(x, y, ..., me)
und verwendenme
als Objekt zum Aufruf der nicht-statischen Methoden.