Kann mir bitte jemand in sehr einfachen Worten erklären, was eine "Methode" in Python ist?
In vielen Python-Tutorials für Anfänger wird dieses Wort so verwendet, als ob der Anfänger bereits wüsste, was eine Methode im Kontext von Python ist. Obwohl ich natürlich mit der allgemeinen Bedeutung dieses Wortes vertraut bin, habe ich keine Ahnung, was dieser Begriff in Python bedeutet. Erklären Sie mir bitte, worum es bei der "Pythonian" -Methode geht.
Ein sehr einfacher Beispielcode wäre sehr willkommen, da ein Bild mehr sagt als tausend Worte.
Antworten:
Es ist eine Funktion, die Mitglied einer Klasse ist:
class C: def my_method(self): print("I am a C") c = C() c.my_method() # Prints("I am a C")
So einfach ist das!
(Es gibt auch einige alternative Methoden, mit denen Sie die Beziehung zwischen der Klasse und der Funktion steuern können. Ich vermute jedoch aus Ihrer Frage, dass Sie nicht danach fragen, sondern nur nach den Grundlagen.)
quelle
self
.self
Konvention aufgerufen wird).Eine Methode ist eine Funktion, die eine Klasseninstanz als ersten Parameter verwendet. Methoden sind Mitglieder von Klassen.
class C: def method(self, possibly, other, arguments): pass # do something here
Da Sie wissen wollten, was es in Python speziell bedeutet, können Sie zwischen gebundenen und ungebundenen Methoden unterscheiden. In Python sind alle Funktionen (und damit auch Methoden) Objekte, die herumgereicht und "gespielt" werden können. Der Unterschied zwischen ungebundenen und gebundenen Methoden ist also:
1) Gebundene Methoden
# Create an instance of C and call method() instance = C() print instance.method # prints '<bound method C.method of <__main__.C instance at 0x00FC50F8>>' instance.method(1, 2, 3) # normal method call f = instance.method f(1, 2, 3) # method call without using the variable 'instance' explicitly
Gebundene Methoden sind Methoden, die zu Instanzen einer Klasse gehören. In diesem Beispiel
instance.method
ist an die aufgerufene Instanz gebundeninstance
. Jedes Mal, wenn diese gebundene Methode aufgerufen wird, wird die Instanz automatisch als erster Parameter übergeben - was gemäßself
Konvention aufgerufen wird.2) Ungebundene Methoden
print C.method # prints '<unbound method C.method>' instance = C() C.method(instance, 1, 2, 3) # this call is the same as... f = C.method f(instance, 1, 2, 3) # ..this one... instance.method(1, 2, 3) # and the same as calling the bound method as you would usually do
Wenn Sie auf
C.method
die Methode innerhalb einer Klasse anstatt innerhalb einer Instanz zugreifen , erhalten Sie eine ungebundene Methode. Wenn Sie es nennen wollen, müssen Sie die Instanz als ersten Parameter übergeben , da das Verfahren nicht in jedem Fall gebunden.Wenn Sie diesen Unterschied kennen, können Sie Funktionen / Methoden als Objekte verwenden, z. B. Methoden weitergeben. Stellen Sie sich als Beispiel für einen Anwendungsfall eine API vor, mit der Sie eine Rückruffunktion definieren können, aber eine Methode als Rückruffunktion bereitstellen möchten. Kein Problem, einfach
self.myCallbackMethod
als Rückruf übergeben und es wird automatisch mit der Instanz als erstem Argument aufgerufen. Dies wäre in statischen Sprachen wie C ++ (oder nur mit Tricks) nicht möglich.Hoffe du hast den Punkt verstanden;) Ich denke das ist alles was du über Methodengrundlagen wissen solltest. Sie könnten auch mehr über die
classmethod
undstaticmethod
Dekorateure lesen , aber das ist ein anderes Thema.quelle
In Python ist eine Methode eine Funktion, die aufgrund des Objekttyps für ein bestimmtes Objekt verfügbar ist .
Wenn Sie beispielsweise erstellen
my_list = [1, 2, 3]
, kann dieappend
Methode angewendet werden,my_list
da es sich um eine Python-Liste handelt :my_list.append(4)
. Alle Listen haben eineappend
Methode, einfach weil sie Listen sind.Wenn Sie ein anderes Beispiel erstellen
my_string = 'some lowercase text'
, kann dieupper
Methode einfach angewendet werden,my_string
weil es sich um eine Python-Zeichenfolge handelt :my_string.upper()
.Listen haben keine
upper
Methode und Strings haben keineappend
Methode. Warum? Da Methoden nur für ein bestimmtes Objekt existieren, wenn sie explizit für diesen Objekttyp definiert wurden , und die Entwickler von Python (bisher) entschieden haben, dass diese bestimmten Methoden für diese bestimmten Objekte nicht benötigt werden.Um eine Methode aufzurufen, lautet das Format
object_name.method_name()
, und alle Argumente für die Methode werden in Klammern aufgeführt. Die Methode wirkt implizit auf das zu benennende Objekt, und daher haben einige Methoden keine angegebenen Argumente, da das Objekt selbst das einzige notwendige Argument ist. Beispielsweisemy_string.upper()
sind keine Argumente aufgelistet, da das einzige erforderliche Argument das Objekt selbst istmy_string
.Ein häufiger Punkt der Verwirrung betrifft Folgendes:
import math math.sqrt(81)
Ist
sqrt
eine Methode desmath
Objekts? Nein. So rufen Sie diesqrt
Funktion vommath
Modul aus auf. Das verwendete Format istmodule_name.function_name()
anstelle vonobject_name.method_name()
. Im Allgemeinen ist die einzige Art und Weise zwischen den beiden Formaten (visuell) zu unterscheiden , in dem Rest des Codes schauen und sehen , ob das Teil vor der Periode (math
,my_list
,my_string
) als ein Objekt oder ein Modul definiert ist.quelle
Entschuldigung, aber meiner Meinung nach hat RichieHindle völlig Recht, diese Methode zu sagen ...
Hier ist das Beispiel einer Funktion, die Mitglied der Klasse wird. Seitdem verhält es sich wie eine Methode der Klasse. Beginnen wir mit der leeren Klasse und der normalen Funktion mit einem Argument:
>>> class C: ... pass ... >>> def func(self): ... print 'func called' ... >>> func('whatever') func called
Jetzt fügen wir der
C
Klasse ein Mitglied hinzu , das den Verweis auf die Funktion darstellt. Danach können wir die Instanz der Klasse erstellen und ihre Methode aufrufen, als ob sie innerhalb der Klasse definiert worden wäre:>>> C.func = func >>> o = C() >>> o.func() func called
Wir können auch die alternative Methode zum Aufrufen der Methode verwenden:
>>> C.func(o) func called
Das
o.func
gerade manifestiert sich genauso wie die Klassenmethode:>>> o.func <bound method C.func of <__main__.C instance at 0x000000000229ACC8>>
Und wir können den umgekehrten Ansatz ausprobieren. Definieren wir eine Klasse und stehlen ihre Methode als Funktion:
>>> class A: ... def func(self): ... print 'aaa' ... >>> a = A() >>> a.func <bound method A.func of <__main__.A instance at 0x000000000229AD08>> >>> a.func() aaa
Bisher sieht es genauso aus. Nun stiehlt die Funktion:
>>> afunc = A.func >>> afunc(a) aaa
Die Wahrheit ist, dass die Methode kein "was auch immer" -Argument akzeptiert:
>>> afunc('whatever') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unbound method func() must be called with A instance as first argument (got str instance instead)
IMHO, dies ist nicht das Argument gegen Methode ist eine Funktion, die Mitglied einer Klasse ist .
Später fand die Antwort von Alex Martelli, die im Grunde das gleiche sagt. Entschuldigung, wenn Sie es als Vervielfältigung betrachten :)
quelle
http://docs.python.org/2/tutorial/classes.html#method-objects
quelle
Wenn Sie sich ein Objekt als einem Substantiv ähnlich vorstellen, ähnelt eine Methode einem Verb. Verwenden Sie eine Methode direkt nach einem Objekt (dh eine Zeichenfolge oder eine Liste), um die Aktion einer Methode darauf anzuwenden.
quelle
Um Methoden zu verstehen, müssen Sie zunächst objektorientiert programmieren: Nehmen wir ein Auto als Klasse. Alle Autos haben Gemeinsamkeiten und Dinge, die sie einzigartig machen, zum Beispiel haben alle Autos 4 Räder, Türen, ein Lenkrad ... aber Ihr individuelles Auto (nennen wir es my_toyota) ist rot und geht von 0 bis 60 Zoll 5.6s Weiter befindet sich das Auto derzeit in meinem Haus, die Türen sind verschlossen, der Kofferraum ist leer ... All dies sind Eigenschaften der Instanz von my_toyota. your_honda ist vielleicht unterwegs, Kofferraum voller Lebensmittel ...
Es gibt jedoch Dinge, die Sie mit dem Auto tun können. Sie können es fahren, Sie können die Tür öffnen, Sie können es laden. Diese Dinge, die Sie mit einem Auto tun können, sind Methoden des Autos und ändern die Eigenschaften der spezifischen Instanz.
als Pseudocode würden Sie tun:
um den Standort von meinem Zuhause in den Laden zu ändern oder
Dadurch wird der Kofferraum nun mit [Milch, Butter, Brot] beladen.
Als solche Methode ist praktisch eine Funktion, die als Teil des Objekts fungiert:
class Car(vehicle) n_wheels = 4 load(self, stuff): '''this is a method, to load stuff into the trunk of the car''' self.open_trunk self.trunk.append(stuff) self.close_trunk
Der Code wäre dann:
quelle