2009-09-29 17 views
16

Eventuali duplicati:
Perl's AUTOLOAD in Python (getattr on a module)Python Auto Importazione

vengo da un background di PHP e il tentativo di imparare Python, e voglio essere sicuri di fare le cose nel "Python modo "invece di come ho sviluppato prima.

La mia domanda deriva dal fatto che in PHP5 è possibile impostare il codice in modo che se si tenta di chiamare una classe che non esiste nello spazio dei nomi, verrà eseguita prima una funzione che caricherà la classe e consentirà di continua come se fosse già caricato. i vantaggi di questo sono le classi non caricate a meno che non siano state chiamate, e non ti devi preoccupare di caricare le classi prima di usarle.

In Python, c'è molta enfasi sulla dichiarazione di importazione, è una cattiva pratica tentare un trucco di importazione automatica con python, per alleviare la necessità di una dichiarazione di importazione? Ho trovato this module che offre l'importazione automatica, ma non so se questo è il modo migliore per farlo, o se l'importazione automatica di moduli è qualcosa che è raccomandato, pensieri?

+0

Questa è una discussione ripetuta da http://stackoverflow.com/questions/1024455/autoload-in-python –

risposta

12

Importazioni servono almeno altri due scopi importanti oltre a rendere i moduli o contenuti dei moduli disponibili:

  1. Essi servono come una sorta di dichiarazione d'intenti - "Questo modulo utilizza i servizi da questo altro modulo" o "questo modulo utilizza servizi appartenenti a una determinata classe" - es se si sta eseguendo una revisione della sicurezza per il codice di gestione socket, è possibile iniziare esaminando solo i moduli che importano socket (o altri moduli correlati alla rete)
  2. Le importazioni fungono da proxy per la complessità di un modulo. Se ti trovi con decine di linee di importazione, potrebbe essere il momento di riconsiderare la separazione delle preoccupazioni all'interno del modulo o all'interno della tua applicazione nel suo insieme. Questa è anche una buona ragione per evitare le importazioni di tipo "from foo import *".
9

In Python, le persone di solito evitano le importazioni automatiche, solo perché non ne vale la pena. È possibile rimuovere leggermente i costi di avvio, ma in caso contrario, non c'è (o dovrebbe essere) alcun effetto significativo. Se hai dei moduli che sono costosi da importare e fai un sacco di cose che non devono essere fatte, riscrivi il modulo piuttosto che rimandare l'importazione.

Detto questo, non c'è nulla di intrinsecamente sbagliato nelle importazioni automatiche. A causa della natura proxy, potrebbero esserci alcune insidie ​​(ad esempio quando si guarda una cosa che non è stata ancora importata). Diverse librerie di importazione automatica sono fluttuanti.

1

Se stai imparando Python e vuoi fare le cose in modo Python, quindi importa i moduli. È molto inusuale per trovare l'autoimportazione nel codice Python molto.

1

È possibile importare automaticamente i moduli, ma il massimo che ho mai avuto bisogno di importare era circa 10, e cioè dopo aver aggiunto le funzionalità al programma originale. Non importerai molto, e i nomi sono molto facili da ricordare.