Python: ruft das Aufrufen einer Methode 'direkt' das Objekt auf?

7

Ich bin neu bei Python, und während ich einige Methoden an meinem Objekt getestet habe, ist mir etwas "Seltsames" aufgefallen.

%Vor%

Ich habe dieses kleine Beispiel geschrieben, um zu verdeutlichen, wo ich verwirrt war. Wenn Sie Ape (). Say ('eeek') machen, instantiiert das tatsächlich ein Ape-Objekt und führt die init-Methode aus? Ich dachte, es würde nicht, aber ich hatte einige seltsame Nebenwirkungen, also denke ich, dass es tut?

    
Pickels 08.07.2010, 02:27
quelle

3 Antworten

10

Ja, tut es. Das macht Ape() : Er erstellt ein neues Ape -Objekt, und als Teil dieses Prozesses wird die __init__ -Methode ausgeführt.

In Ihrem Beispiel rufen Sie dann die Methode say dieses Objekts auf. Beachten Sie, dass Sie say nicht aufrufen können, wenn Sie kein Ape -Objekt haben.

    
David Z 08.07.2010, 02:28
quelle
12

Wenn Sie eine Methode direkt aufrufen möchten, ohne eine Instanz zu erstellen, können Sie den staticmethod Dekorator verwenden. Beachten Sie, dass% self nicht vorhanden ist, wenn Sie eine statische Methode verwenden

%Vor%

Vergleiche mit Klassenmethoden, bei denen die Klasse der erste Parameter anstelle einer Instanz ist

%Vor%     
John La Rooy 08.07.2010 03:41
quelle
3

Ja. Ape () instanziiert ein Objekt der Klasse Ape, obwohl, da keine Zuweisung vorhanden ist, kein Etikett damit assoziiert ist. An diesem Punkt wird seine Funktion __init__ aufgerufen. Dann wird die say-Funktion aufgerufen.

Um es klar zu sagen:

%Vor%

entspricht:

%Vor%

Was deutlicher zeigt, was zuerst passiert.

    
apalopohapa 08.07.2010 02:49
quelle

Tags und Links