Sto creando una serie di linee guida per la codifica di Python per un team di circa 30 sviluppatori. Come base per il mio documento, finora ho studiato il Google python style guide e lo PEP 8 style guide e le informazioni incorporate da entrambi.In python, quali sono i pro e i contro dell'importazione di una classe e dell'importazione del modulo della classe?
Un luogo in cui la guida di stile di Google è più restrittiva di PEP 8 con le importazioni. La guida di Google richiede agli sviluppatori di importare solo pacchetti e moduli, quindi di fare riferimento agli articoli all'interno con un nome più qualificato. Per esempio:
from pkg import module
...
my_class = module.MyClass()
La giustificazione è che la "fonte di ogni identificatore è indicato in modo coerente". Per il nostro progetto, intendiamo organizzare con pacchetti di due o tre livelli profondi, in modo da conoscere la fonte completa dell'identificatore, il lettore probabilmente dovrà esaminare comunque la dichiarazione di importazione. Mi piacerebbe sostenere questo stile di importazione come "stile preferito":
from pkg.module import MyClass
...
my_class = MyClass()
IMHO, la leggibilità in costrutti Python come la list comprehension è migliorata quando i nomi sono più succinto.
Quello che non mi è chiaro è cosa potrebbe fare l'interprete Python dietro le quinte. Ad esempio, MyClass ora fa parte dello spazio dei nomi globale sia per questo modulo, sia per tutti gli importatori di questo modulo? (Questo sarebbe male, potrebbe portare a qualche bizzarro bug, se questo fosse vero, difenderei lo stile di Google).
La mia esperienza di sviluppo in Python è limitata a circa 6 mesi (e non ci sono molti esperti sul nostro progetto da consultare), quindi volevo ottenere maggiori informazioni dalla comunità. Qui ci sono alcuni elementi ho ricercato già:
effbot - discussion on imports
stack overflow - import vs. from import
python documentation - modules
Grazie per le vostre risposte!
* Tutto ciò * che è possibile fare riferimento è direttamente un globale nel modulo. 'MyClass' è davvero un globale nel tuo secondo esempio, nel primo,' module' è. –
Faccio "import blah" e "vlah = blah.vlah". Perché intero modulo 'blah' verrebbero trattati in ogni caso, anche se ho fatto' dall'importazione bla vlah' – thkang
A parte la domanda globale che Martijn risposto, eravate alla ricerca di qualcosa di diverso. In tal caso, puoi rendere la domanda più esplicita? – msw