Aufruf einer Funktion aus der Klasse in Python - andere Art und Weise

8

EDIT2: Vielen Dank für Ihre Hilfe! BEARBEITEN: Beim Hinzufügen von @staticmethod funktioniert es. Allerdings frage ich mich immer noch, warum ich hier einen Typfehler bekomme.

Ich habe OOPS gerade angefangen und bin völlig neu dazu. Ich habe eine sehr grundlegende Frage bezüglich der verschiedenen Möglichkeiten, wie ich eine Funktion von einer Klasse nennen kann. Ich habe eine testClass.py Datei mit dem Code:

%Vor%

Ich rufe diese Klasse aus einer anderen Datei namens main.py mit folgendem Code auf:

%Vor%

Dies funktioniert ohne Probleme. Ich wollte die Klasse jedoch viel einfacher verwenden.

Ich habe jetzt den folgenden Code in die Datei testClass.py geschrieben. Ich habe diesmal die Init-Funktion fallen gelassen.

%Vor%

ruft dies mit;

auf %Vor%

das funktioniert nicht. Kann jemand in Fall 2 etwas falsch erklären? Wie verwende ich diese Klasse?

Der Fehler, den ich bekomme, ist "TypeError: testAddition () nimmt genau 2 Argumente (3 gegeben)"

    
Rishav Sharan 01.11.2011, 10:24
quelle

5 Antworten

14

Sie müssen self als erste Parameter einer Methode verwenden

Im zweiten Fall sollten Sie

verwenden %Vor%

und in Ihrem Code könnten Sie Folgendes tun

%Vor%

Wenn Sie die Klasse verwenden, ohne zuerst eine Variable zu instanziieren

%Vor%

es gibt Ihnen einen Fehler "TypeError: ungebundene Methode"

Wenn Sie dies tun möchten, benötigen Sie den @ staticmethod Dekorator

Zum Beispiel:

%Vor%

Dann könnten Sie in Ihrem Code

verwenden %Vor%     
Rafael Rotelok 01.11.2011, 10:32
quelle
7

Haftungsausschluss: Dies ist keine Antwort auf den Punkt, es ist mehr wie ein Ratschlag, auch wenn die Antwort auf die Referenzen

gefunden werden kann

IMHO: Objektorientierte Programmierung in Python saugt ziemlich viel.

Die Methodenverteilung ist nicht sehr einfach, Sie müssen über gebundene / ungebundene Instanz- / Klassen- (und statische!) Methoden Bescheid wissen; Sie können eine mehrfache Vererbung haben und müssen mit alten und neuen Stilklassen umgehen (Ihre war ein alter Stil) und wissen, wie die MRO funktioniert, Eigenschaften ...

Kurz gesagt: zu komplex, mit vielen Dingen unter der Haube. Lassen Sie mich sogar sagen, es ist unpythonisch, da es viele verschiedene Wege gibt, die gleichen Dinge zu erreichen.

Mein Rat: Verwenden Sie OOP nur, wenn es wirklich nützlich ist. Üblicherweise bedeutet dies, Klassen zu schreiben, die bekannte Protokolle implementieren und sich nahtlos in den Rest des Systems integrieren. Erstellen Sie nicht viele Klassen, nur um objektorientierten Code zu schreiben.

Lesen Sie diese Seiten:

Sie finden sie ziemlich nützlich.

Wenn Sie wirklich OOP lernen wollen, würde ich vorschlagen, mit einer konventionelleren Sprache wie Java zu beginnen. Es ist nicht halb so viel Spaß wie Python, aber es ist vorhersehbarer.

    
fortran 01.11.2011 10:57
quelle
2

Ihre Methoden beziehen sich nicht auf ein Objekt (also auf sich selbst), Sie sollten es also tun Verwende den @staticmethod-Dekorierer :

%Vor%     
Owen 01.11.2011 10:29
quelle
1

Sie müssen eine Instanz einer Klasse haben, um ihre Methoden zu verwenden. Oder wenn Sie nicht auf Variablen einer Klasse zugreifen müssen (keine statischen Parameter), können Sie die Methode als statisch definieren und sie kann auch verwendet werden, wenn die Klasse nicht instanziiert wird. Fügen Sie einfach @staticmethod Decorator zu Ihren Methoden hinzu.

%Vor%

docs: Ссылка

    
rplnt 01.11.2011 10:29
quelle
0
%Vor%

dann

%Vor%     
Ali Hajiloo 19.03.2018 22:29
quelle

Tags und Links