2013-01-04 21 views
5

Utilizziamo sempre il meccanismo di importazione di python per importare moduli e variabili e altre cose ... ma c'è qualcosa che funziona come esportazione? come:Esiste qualcosa come l'esportazione di Python?

importiamo roba da un modulo:

from abc import * 

così possiamo esportare come ?:

to xyz export * 

o esportazione a, b, c per program.py

So che questa domanda non è un tipico tipo di domanda da porre qui ... ma solo per curiosità. Ho controllato la console di Python e non c'è nulla che esista come "esportazione" ... forse esiste con alcuni nome appropriato ...?

+6

Come funziona esattamente? – NPE

+2

Perché lo vuoi? – delnan

+0

come invece di esportare qualsiasi variabile o metodo da un file o da un modulo python..perché non esportiamo da quel file alla nostra destinazione in modo tale che anche se il nostro codice diventa pubblico ... non si sa da dove vengono le variabili oi metodi? questo è solo un aspetto ... secondo me ... se esiste un'importazione allora dovrebbe esistere un'esportazione. :-) – khan

risposta

7

Innanzitutto, importa il modulo in cui desideri esportare materiale, in modo da avere un riferimento ad esso. Quindi assegnare le cose che si desidera esportare come attributi del modulo:

# to xyz export a, b, c 
import xyz 
xyz.a = a 
xyz.b = b 
xyz.c = c 

a fare un export jolly, è possibile utilizzare un ciclo:

# to xyz export * 
exports = [(k, v) for (k, v) in globals().iteritems() if not k.startswith("_")] 
import xyz 
for k, v in exports: setattr(xyz, k, v) 

(Si noti che ci riuniamo l'elenco di oggetti da esportare prima del importando il modulo, in modo da evitare di esportare un riferimento al modulo che abbiamo appena importato in sé.)

Questa è fondamentalmente una forma di patch di scimmia. Ha il suo tempo e il suo posto. Naturalmente, affinché funzioni, il modulo che esegue "l'esportazione" deve essere eseguito; semplicemente importando il modulo che verrà aggiornato non si renderà magicamente conto che un altro codice da qualche parte andrà a correggerlo.

Problemi correlati