Classi contro moduli in Python


19

Python ha molti moduli (come re) che eseguono un insieme specifico di azioni. Puoi chiamare le funzioni di questo modulo e ottenere risultati, e il modulo nel suo insieme ha un'idea (in questo caso, gestire le espressioni regolari).

Le classi sembrano fare quasi la stessa identica cosa, ma sembrano anche usare proprietà un po 'più dei moduli.

In che modo i moduli sono diversi dalle classi? (So ​​che non posso sottoclassare un modulo, ma è così?) Quando dovrei usare una classe anziché un modulo?


Sei consapevole del fatto che quando chiami i metodi del modulo, a volte il modulo passa solo a un'istanza di una classe? Vedi ad esempio il randommodulo. Non ricordo se questo sia vero re, comunque.
jscs,

1
Un concetto correlato da sapere: modulo vs. pacchetto?
RBT,

Risposte:


12

Un modulo Python non è altro che un pacchetto per incapsulare il codice riutilizzabile. I moduli di solito, ma non sempre, risiedono in una cartella con un __init__.pyfile al suo interno. I moduli possono contenere funzioni ma anche classi. I moduli vengono importati utilizzando la importparola chiave.

Python ha un modo per mettere le definizioni in un file e usarle in uno script o in un'istanza interattiva dell'interprete. Tale file è chiamato modulo; le definizioni da un modulo possono essere importate in altri moduli o nel modulo principale.

Ulteriori informazioni sui moduli Python a questi link:

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

Le classi, d'altra parte, possono essere definite nel codice dell'applicazione principale o all'interno dei moduli importati dall'applicazione. Le classi sono il codice della programmazione orientata agli oggetti e possono contenere proprietà e metodi.

Ulteriori informazioni sulle classi Python a questi collegamenti:

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


3
Quindi non è una brutta cosa avere una singola classe in un modulo, anche se quella classe ha solo funzioni? Sento che in quella situazione dovrei generalmente fare un modulo senza fare una lezione. Esiste una regola di base su quando utilizzare le classi anziché i moduli? (È quello che sto cercando di chiedere ... Devo modificare la mia domanda per renderla più chiara?)
Pro Q

6
È possibile creare più istanze di una classe, ma non è possibile creare istanze di un modulo. È possibile confrontare i moduli con classi statiche o singoli.
Eneko Alonso,

1
I moduli non risiedono sempre in una cartella con un __init__.pyfile.
multigoodverse,

1
@ProQ In linguaggi come Python in cui è possibile avere funzioni nei moduli piuttosto che nelle classi (al contrario, diciamo, Java) è generalmente una buona forma mantenere semplicemente le funzioni statiche a livello di modulo. Le classi implicano istanze con il proprio stato.
Turksarama,

-2

Se è un gruppo di funzioni pure, ad esempio re, le inserisco in un modulo. Uso una classe quando so che c'è uno stato che voglio mantenere con quel codice (ad esempio un file che viene letto una volta, ma i cui dati sono utilizzati da diverse funzioni).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.