2015-04-28 16 views
10

Ho iniziato a programmare in Python 2 settimane fa. Sto facendo un file separato (modulo) per ogni classe come ho fatto prima in linguaggi come Java o C#. Ma ora, vedendo tutorial e codice di altre persone, ho capito che molte persone usano gli stessi file per definire più di 1 classe e la funzione principale, ma non so se lo fanno così perché sono solo esempi o perché è una convenzione python o qualcosa del genere (per definire e raggruppare molte classi negli stessi file).Python: un singolo modulo (file .py) per ogni classe?

Quindi, in Python, un file per ogni classe o molte classi negli stessi file se possono essere raggruppati per una particolare caratteristica? (come i veicoli a motore da un lato e solo i veicoli dall'altro lato).

È ovvio che ognuno ha il proprio stile, ma quando lo chiedo, spero risposte generali o solo le convenzioni, comunque, se qualcuno vuole dirmi la sua opinione sul proprio stile e perché, sentitevi liberi di farlo ! ;)

+1

Penso che ogni risposta che otterrete sarà un'opinione, non esiste una risposta definitiva. –

+0

Se si desidera un file per classe, organizzare i file di classe in una directory e disporre di un '__init __. Py' che esegue' da ClassName import * 'per ogni classe. "Non farlo mai" sembra una risposta molto sprezzante, come ogni schema ci sono vantaggi e svantaggi. – szmoore

risposta

8

un file per ogni classe

non fare questo. In Java, non è possibile, in base alla progettazione, avere più di una classe in un file.

In Python, se raggruppate le classi correlate in un singolo file, siete al sicuro. Dai uno sguardo allo Python standard library: molti moduli contengono più classi in un singolo file.

Per quanto riguarda il perché? In breve: leggibilità. Personalmente, mi diverto a non dover passare da un file all'altro per leggere un codice correlato o simile. Rende anche le importazioni più concise.

Immaginate socketserver.py sarebbe diffuso UDPServer, TCPServer, ForkingUDPServer, ForkingTCPServer, ThreadingUDPServer, ThreadingTCPServer, BaseRequestHandler, StreamRequestHandler, DatagramRequestHandler in nove file. Come li importeresti? Come questo?

from socketserver.tcp.server import TCPServer 
from socketserver.tcp.server.forking import ForkingTCPServer 
... 

Questo è un overhead. È sovraccarico, quando lo scrivi. È sovraccarico, quando lo leggi. Non è più facile?

from socketserver import TCPServer, ForkingTCPServer 

Detto questo, nessuno ti fermerà, se metti ogni classe in un singolo file. Potrebbe non essere pythonic.

+2

Ma perché? Voglio dire, cosa c'è di sbagliato nell'avere un file per ogni classe o perché è bene definire molte classi negli stessi file? – Drumnbass

+1

Non è sbagliato, ma può diventare un gran casino con un sacco di importazioni – Morb

+2

Lo faccio anche con C++, metto tutte le classi correlate insieme nello stesso file. Meno file da aprire, meno include, meno tempo per trovare la classe/file che voglio. – Morb

1

Non è sbagliato avere una classe per file. Python non è direttamente rivolto alla progettazione orientata agli oggetti, ecco perché è possibile fare a meno di più classi per file.

Si consiglia di leggere alcune guide di stile se si è confusi su quale sia il modo "corretto" per farlo.

suggerisco sia Google's style guide o il funzionario style guide by the Python Foundation

È inoltre possibile trovare più materiale relativo ai modi di dire di Python e meta-analisi nel PEP index

4

Python ha il concetto di pacchetti, moduli e classi. Se metti una classe per modulo, il vantaggio di avere i moduli è finito. Se sei un grande classe, potrebbe essere ok mettere questa classe in un file separato, ma poi di nuovo, è bello avere grandi classi? NO, è difficile da testare e mantenere.È meglio avere classi più piccole con compiti specifici e inserirle logicamente nel minor numero possibile di file.

Problemi correlati