Klassen vs. Module in Python

19

Python verfügt über viele Module (z. B. re), die bestimmte Aktionen ausführen. Sie können die Funktionen dieses Moduls aufrufen und Ergebnisse erhalten. Das gesamte Modul hat eine Idee dahinter (in diesem Fall handelt es sich um reguläre Ausdrücke).

Klassen scheinen fast dasselbe zu tun, aber sie scheinen auch Eigenschaften zu verwenden, die viel mehr sind als Module.

Inwiefern unterscheiden sich Module von Klassen? (Ich weiß, dass ich ein Modul nicht unterordnen kann, aber ist es das?) Wann sollte ich eine Klasse anstelle eines Moduls verwenden?

Pro Q
quelle
Ist Ihnen bewusst, dass das Modul beim Aufrufen von Modulmethoden manchmal nur an eine Instanz einer Klasse weitergeleitet wird? Siehe zum Beispiel das randomModul. Ich erinnere mich jedoch nicht, ob dies zutrifft re.
Jscs
1
Ein verwandtes Konzept zu wissen - Modul vs. Paket?
RBT

Antworten:

12

Ein Python-Modul ist nichts anderes als ein Paket zur Kapselung von wiederverwendbarem Code. Module befinden sich normalerweise, aber nicht immer, in einem Ordner, in dem sich eine __init__.pyDatei befindet. Module können Funktionen, aber auch Klassen enthalten. Module werden mit dem importSchlüsselwort importiert .

In Python können Definitionen in eine Datei eingefügt und in einem Skript oder in einer interaktiven Instanz des Interpreters verwendet werden. Eine solche Datei wird als Modul bezeichnet. Definitionen aus einem Modul können in andere Module oder in das Hauptmodul importiert werden.

Weitere Informationen zu Python-Modulen erhalten Sie unter folgenden Links:

https://docs.python.org/2/tutorial/modules.html (Python 2) https://docs.python.org/3/tutorial/modules.html (Python 3)

Klassen hingegen können in Ihrem Hauptanwendungscode oder in Modulen definiert werden, die von Ihrer Anwendung importiert wurden. Klassen sind der Code der objektorientierten Programmierung und können Eigenschaften und Methoden enthalten.

Weitere Informationen zu Python-Klassen erhalten Sie unter folgenden Links:

https://docs.python.org/2/tutorial/classes.html (Python 2) https://docs.python.org/3/tutorial/classes.html (Python 3)

Eneko Alonso
quelle
3
Es ist also keine schlechte Sache, eine einzelne Klasse in einem Modul zu haben, auch wenn diese Klasse nur Funktionen hat? Ich habe das Gefühl, dass ich in dieser Situation im Allgemeinen nur ein Modul erstellen sollte, ohne eine Klasse zu erstellen. Gibt es eine Grundregel, wann Klassen anstelle von Modulen verwendet werden sollen? (Das ist, was ich versuche zu fragen ... Sollte ich meine Frage bearbeiten, um es klarer zu machen?)
Pro Q
6
Sie können mehrere Instanzen einer Klasse erstellen, jedoch keine Instanzen eines Moduls. Sie können Module mit statischen Klassen oder Singletons vergleichen.
Eneko Alonso
1
Module befinden sich nicht immer in einem Ordner mit einer __init__.pyDatei.
Multigoodverse
1
@ProQ In Sprachen wie Python, in denen Sie Funktionen in Modulen anstelle von Klassen haben können (im Gegensatz zu beispielsweise Java), ist es im Allgemeinen gut, statische Funktionen nur auf Modulebene zu belassen. Klassen implizieren Instanzen mit eigenem Status.
Turksarama
-2

Wenn es sich um eine Reihe von reinen Funktionen handelt, z. B. habe reich sie in ein Modul eingefügt. Ich benutze eine Klasse, wenn ich weiß, dass ich diesen Code beibehalten möchte (z. B. eine Datei, die einmal eingelesen wird, deren Daten jedoch von mehreren Funktionen verwendet werden).

Greg Bell
quelle