Gibt es Funktionen in Python?

8

Oder ist alles eine Methode?

Da alles ein Objekt ist, ein

%Vor%

ist nur eine Methode dieser Datei.py, richtig?

    
TIMEX 30.11.2009, 11:55
quelle

3 Antworten

31

Python hat Funktionen. Da alles ein Objekt ist Funktionen sind auch Objekte .

Also, um Ihr Beispiel zu verwenden:

%Vor%

Wenn wir def verwenden, haben wir ein Objekt erstellt, das eine Funktion ist. Wir können zum Beispiel ein Attribut des Objekts betrachten:

%Vor%

Als Antwort auf Ihre Frage - whatever() ist nicht eine Methode von file.py . Es ist besser, es als ein Funktionsobjekt zu betrachten, das an den Namen whatever im globalen Namespace von file.py gebunden ist.

%Vor%

Oder um es anders zu betrachten, es hindert uns nichts daran, den Namen whatever an ein anderes Objekt zu binden:

%Vor%

Es gibt andere Möglichkeiten, Funktionsobjekte zu erstellen. Zum Beispiel lambdas :

%Vor%

Eine Methode ist wie ein Attribut eines Objekts, das eine Funktion ist. Was es zu einer Methode macht, ist, dass die Methoden an das Objekt gebunden werden. Dadurch wird das Objekt als erstes Argument an die Funktion übergeben, die wir normalerweise self nennen.

Definieren wir eine Klasse SomeClass mit einer Methode somemethod und einer Instanz someobject :

%Vor%

Sehen wir uns somemethod als Attribut an:

%Vor%

Wir können sehen, dass es eine gebundene Methode für das Objekt und eine ungebundene Methode für die Klasse ist. Lassen Sie uns nun die Methode aufrufen und sehen, was passiert:

%Vor%

Da es sich um eine gebundene Methode handelt, ist das erste von somemethod empfangene Argument das Objekt und das zweite Argument das erste Argument im Methodenaufruf. Lassen Sie uns die Methode für die Klasse aufrufen:

%Vor%

Python beschwert sich, weil wir versuchen, die Methode aufzurufen, ohne ihr ein Objekt des passenden Typs zu geben. Wir können das beheben, indem wir das Objekt "von Hand" übergeben:

%Vor%

Sie können Methodenaufrufe dieses Typs - Aufruf einer Methode für eine Klasse - verwenden, wenn Sie eine bestimmte Methode von einer übergeordneten Klasse aufrufen möchten.

(Es ist möglich eine Funktion zu verwenden und an die Klasse zu binden, um sie zu einer Methode , aber das ist normalerweise nicht nötig.)

    
Dave Webb 23.05.2017, 10:32
quelle
2

Anders als in Java in Python enthält eine Datei mit dem Namen file.py nicht notwendigerweise eine Klasse namens file , wie Sie vielleicht erwarten würden, wenn es sich um eine Java-Datei namens file.java handeln würde.

In Python ist eine Datei ein Modul, das eigentlich nur ein Namespace (eher vergleichbar mit einem Java-Paket als eine Java-Klasse) und keine Klasse ist. Betrachten Sie das Beispiel file.py unten:

%Vor%

Im obigen Beispiel enthält der file Modul / Namespace eine gewöhnliche Funktion namens whatever_func und eine Klasse SomeClass mit einer Methode whatever_meth .

    
Tendayi Mawushe 30.11.2009 12:17
quelle
0

Hmm ... Sie können mit "was auch immer" als normale Funktion im Datei-Namespace arbeiten.

    
demas 30.11.2009 12:00
quelle

Tags und Links