Ich habe einige Leute gesehen, die Python-Code geschrieben haben, indem sie eine Klasse erstellt haben und dann ein Objekt, um alle Methoden aufzurufen. Gibt es einen Vorteil der Verwendung von Klassen, wenn wir keine Vererbung, Kapselung usw. verwenden? Ein solcher Code scheint mir weniger sauber zu sein mit all diesen "Selbst" -Argumenten, die wir vermeiden könnten. Ist diese Praxis von anderen Programmiersprachen wie Java abhängig oder gibt es einen guten Grund, warum Python-Programme so strukturiert sein sollten?
Beispielcode:
%Vor%Ein Vorteil, obwohl nicht immer anwendbar, besteht darin, dass es das Programm leicht erweitern kann, indem man die eine Klasse untergliedert. Zum Beispiel kann ich eine Unterklasse erstellen und die Methode überschreiben, die beispielsweise von einer CSV-Datei liest, um eine XML-Datei zu lesen, und dann die Unterklasse oder Originalklasse basierend auf Laufzeitinformationen instanziieren. Von dort kann die Logik des Programms normal fortfahren.
Das wirft natürlich die Frage auf, ob das Lesen der Datei wirklich in der Verantwortung der Klasse liegt oder ob sie korrekter zu einer Klasse gehört, die Unterklassen zum Lesen verschiedener Datentypen hat und eine einheitliche Schnittstelle zu diesen Daten darstellt Natürlich, eine andere Frage.
Persönlich finde ich, dass der sauberste Weg darin besteht, Funktionen, die starke Annahmen über ihre Parameter treffen, auf die entsprechende Klasse als Methoden zu setzen und Funktionen zu setzen, die sehr schwache Annahmen über ihre Argumente im Modul als Funktionen machen / p>
Ich mache oft selbst dasselbe für die Manager-Teile einer App, die theoretisch auf einfache, sehr sequentielle, funktionale Programmierung reduziert werden könnte.
Der Hauptvorteil (für mich) besteht darin, dass es die Hauptschleife oder die Ausführung der Ausführung einkapselt und es erlaubt, diese Daten effizient und sauber zwischen den Blöcken zu konfigurieren und persistent zu machen ohne den Code selbst ändern zu müssen. Ganz zu schweigen von der Fähigkeit, eine Ausführung in eine andere und eine erweiterte Klasse zu unterteilen.
Es ist auch viel einfacher, das Hauptprogramm auf diese Weise zu erweitern, dann ist es, wenn Sie einen festen Block von 200 Zeilen haben, die ziemlich kryptisch umschriebenes Zeug umwerfen.
Das Selbst, nachdem Sie genug Python geschrieben haben, geht irgendwie weg als eine Behinderung, und persönlich mag ich, wie es sofort eine visuelle Unterscheidung zwischen dem anbietet, was ich offensichtlich über Bereiche behalten möchte, und was ein wegwerfbares Element ist, das ich tue Ich will den Umfang verlieren und werde abgeholt, sobald ein bestimmter Schritt erledigt ist.Zu guter Letzt werden manche Leute das Objekt ablehnen, das sie bekommen, oder es nicht lesen können. Ich bin einer von ihnen:)
1. Ich kenne eine Verwendung dafür.
Obwohl dies auf andere Weise erreicht werden kann. Es stellt sicher, dass beide Module - Modul_B und Modul_C die gleiche Instanz von App verwenden und keine separaten Objekte instanziieren.
In module_A.py
%Vor%In module_B.py
%Vor%In module_C.py
%Vor%Natürlich könnten Sie separate Objekte erstellen, aber das war nicht die Absicht der obigen Module.
Was ist, wenn Sie Folgendes in module_D.py
getan haben? %Vor%2. [Pedantisch]
Sie könnten die Verwendung von Klassen vermeiden und Ihre Lösung nur mit Modulen und Funktionen zerlegen. Aber wird das in einem großen Programm nicht hässlich aussehen? Möchten Sie nicht objektorientiertes Paradigma in Ihrem Programm verwenden? Alle Sprachen bieten bestimmte Möglichkeiten, OO zu nutzen. Wir alle mögen das eine oder das andere und manche schalten uns ab. Explizit ist besser als implizit ist normalerweise der Python-Weg. Obwohl dies nicht genug Grund für die Aufnahme ist.
Ich neige dazu, Klassen zu verwenden, wenn es wahrscheinlich ist, dass ich mehrere Instanzen von etwas benötige, oder wenn ich denke, dass das Erben von Nutzen sein wird. Wenn ich nur nach einer Möglichkeit suche, verwandte Funktionen und Einstellungen zu gruppieren, die ihr Verhalten beeinflussen, dann kann ein Modul mit weniger Syntax dafür ebenso gut funktionieren. Manchmal werde ich beide Ansätze im selben Modul verwenden.
Auch wenn Sie Dekoratoren und Kontextmanager als Klassen schreiben können, tendiere ich persönlich dazu, sie klarer zu finden, wenn sie als Funktionen geschrieben werden, also schreibe ich sie so.
Python ist eine Programmiersprache mit mehreren Paradigmen. Verwenden Sie jeden Ansatz, der Ihrer Meinung nach am deutlichsten ist. Sie müssen nie OO verwenden.
Ein Ansatz, den ich gerne benutze, ist zu überlegen, wie ich die verschiedenen Funktionen erhalten möchte, wenn jemand anders ein Modul schreiben würde, um ein Problem wie das meine generisch zu lösen. Grundsätzlich versuche ich zunächst, die Schnittstellen zwischen meinen Modulen zu gestalten und so einfach wie möglich zu gestalten. An diesem Punkt wird mir klar, welche Herangehensweise ich für jede Funktionalität verwenden sollte.
Aber ich bin nur ein Typ, und Programmierung ist nicht meine Hauptaufgabe.
Gibt es einen Vorteil der Verwendung von Klassen, wenn wir keine Vererbung, Kapselung usw. verwenden?
Ja.
dies üben einen Einfluss von anderen Programmiersprachen wie Java
aus
Nein.
Gibt es einen guten Grund, warum Python-Programme so strukturiert sein sollten?
Ja.
Jedoch. Aus Ihrer Frage haben Sie eindeutig entschieden, dass "ein solcher Code mir mit all diesen" Selbst "Argumenten weniger sauber erscheint."
Es ist nicht sehr sinnvoll, die Vorteile einer Klassendeklaration zu erklären, wenn Sie bereits sicher sind, dass sie weniger sauber ist.
Denken Sie darüber nach.
Unterste Zeile.
Sie können für kurze Momente ohne Klasse arbeiten. Bis Sie Änderungen vornehmen. Dann werden Sie es bereuen, das Wort class
und all diese "unsauberen" Argumente nicht zu haben.
Sie fügen sie schließlich hinzu.
Warum warten?