Python Statische Methoden, warum? [Duplikat]

8

Ich habe ein paar Fragen zu statischen Methoden in Klassen. Ich werde mit einem Beispiel beginnen.

Beispiel eins:

%Vor%

Ausgaben:

%Vor%

Beispiel zwei:

%Vor%

Ausgaben

%Vor%

Ich sehe, dass ich in statischen Methoden kein Selbstattribut nennen kann, ich bin mir nicht sicher, wann und warum ich es benutzen soll. Meiner Meinung nach, wenn Sie eine Klasse mit einigen Attributen erstellen, möchten Sie sie vielleicht später verwenden und haben keine statische Methode, bei der alle Attribute nicht aufrufbar sind. Kann mir das jemand erklären? Python ist meine erste Programmiersprache, also wenn das zum Beispiel in Java so ist, weiß ich nicht.

    
Community 06.06.2012, 21:41
quelle

1 Antwort

8

Was versuchst du mit diesem staticmethod zu erreichen? Wie erwarten Sie, dass es löst, was auch immer Ihr Problem ist, wenn Sie nicht wissen, was es tut?

Oder spielen Sie nur herum, um zu sehen, was staticmethod macht? In diesem Fall wäre es wahrscheinlich produktiver, die Dokumente zu lesen , um zu erfahren, was es tut als wenn man es zufällig anwendet und versucht, aus dem Verhalten zu erraten, was es tut.

In jedem Fall wird durch das Anwenden von @staticmethod auf eine Funktionsdefinition in einer Klasse eine "statische Methode" erstellt. "Static" ist leider einer der am meisten überladenen Begriffe in der Programmierung; Hier bedeutet es, dass die Methode nicht vom Status des Objekts abhängt oder diesen ändert . Wenn ich eine statische Methode foo in einer Klasse Bar definiert habe, dann wird das Aufrufen von bar.foo(...) (wobei bar eine Instanz der Klasse Bar ist) genau dasselbe tun, unabhängig davon, was bar ' s Attribute enthalten. Tatsächlich kann ich es direkt von der Klasse als Bar.foo(...) nennen, wenn ich nicht einmal eine Instanz habe!

Dies wird erreicht, indem die Instanz einfach nicht in die statische Methode übergeben wird. Daher haben statische Methoden keinen Parameter self .

Statische Methoden sind selten notwendig, aber gelegentlich bequem. Sie sind wirklich dieselben wie einfache Funktionen, die außerhalb der Klasse definiert sind, aber wenn sie in die Klasse eingefügt werden, werden sie als mit der Klasse "assoziiert" bezeichnet. Sie würden sie normalerweise zum Berechnen oder Ausführen von Dingen verwenden, die eng mit der Klasse verwandt sind, aber nicht tatsächlich Operationen an einem bestimmten Objekt sind.

    
Ben 06.06.2012, 23:20
quelle