2012-02-06 15 views
9

Sto cercando di importare solo una variabile all'interno di una classe da un altro modulo:Importa una variabile di classe da un altro modulo

import module.class.variable 
# ImportError: No module named class.variable 

from module.class import variable 
# ImportError: No module named class 

from module import class.variable 
# SyntaxError: invalid syntax (the . is highlighted) 

posso fare quanto segue, ma preferirei di importare solo la variabile Ho bisogno.

from module import class as tmp 
new_variable_name = tmp.variable 
del tmp 

È possibile?

risposta

10
variable = __import__('module').class.variable 
+0

Sono corretto nel pensare che questo importerà l'intero modulo? Equivalente a 'import module' then' variable = module.class.variable'? –

+7

Tranne che non associa alcun nome al modulo importato. va bene: 'dal modulo import clazz'" importa l'intero modulo "troppo, * esattamente nello stesso modo *. Semplicemente non c'è modo di aggirare questo, la definizione della classe non può essere garantita avere senso senza il resto del modulo contesto, e allo stesso modo per gli attributi della classe. –

+0

@Alex Sarà sempre importato il modulo * whole * (ma dipende dalla tua dichiarazione * cosa * sarà disponibile nello scope degli script). 'da x1 import x2' caricherà' x1' e poi guarderà dove trovare 'x2', sia nell'ambito di' x2' sia come sotto-pacchetto. –

5

Non si può fare che - l'istruzione import può portare solo elementi di unità ei moduli - attributi di classe, anche se indirizzabile con la stessa sintassi del punto che viene utilizzato per l'accesso sub-modulo, non può essere importati singolarmente.

Che cosa si può fare è:

from mymodule import myclass 
myvar = myclass.myvar 
del myclass 

Ad ogni modo, ogni volta che uno non utilizzare la sintassi from module import anything, l'intero modulo viene letto e l'eccezione è procedato è

from module.submodule import submodule 

, dove, se il modulo stesso non richiede l'intero modulo, solo il sottomodulo viene elaborato.

(Quindi, anche su una soluzione sopra indicata, mymodule viene letto ed eseguito - non è reso accessibile nello spazio dei nomi globale in cui è stata creata l'istruzione import, ma sarà visibile, con tutti i suoi componenti, nel dizionario sys.modules

+0

La soluzione alternativa è straordinariamente simile alla mia soluzione alternativa! Grazie per la spiegazione –

Problemi correlati