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)"
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%Haftungsausschluss: Dies ist keine Antwort auf den Punkt, es ist mehr wie ein Ratschlag, auch wenn die Antwort auf die Referenzen
gefunden werden kannIMHO: 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.
Ihre Methoden beziehen sich nicht auf ein Objekt (also auf sich selbst), Sie sollten es also tun Verwende den @staticmethod-Dekorierer :
%Vor% 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.
docs: Ссылка