2017-01-04 10 views
0

Ich wollte den Import mit einem Variablennamen verwenden. Zum Beispiel wollte ich so etwas wie diesesPython-Import als Variablenname

from var import my_class 

ich Pythons ging tun, durch documentation, scheint aber das ist ein wenig verwirrend. Ich habe auch einige anderen Posting auf Stack-Überlauf gesehen, dass das Beispiel so etwas wie diese Dieses zweite Beispiel

import importlib 
my_module = importlib.import_module("var, my_class) 

geben zu einem gewissen Grad funktioniert. Das einzige Problem, das ich hier sehe Var ist importiert, aber ich sehe nicht die Attribute von my_class im Python-Namespace. Wie würde ich gleichsetzen, dies zu meinem ursprünglichen Beispiel

from var import my_class 

Antwort

3

Hier ist, wie importlib zu verwenden (es besteht keine Notwendigkeit für den zweiten Parameter):

var = importlib.import_module("var") 

# Now, you can use the content of the module: 
var.my_class() 

Es gibt keine direkte programmierbare Äquivalent für from var import my_class.

+0

Ich habe es falsch benutzt. Vielen Dank. – Matt

+1

Könnten Sie nicht sagen, dass 'my_class = importlib.import_module (" var ") .__ getattribute __ (" meine_klasse ")' ist ein direkt programmierbares Äquivalent für 'from var import my_class'? –

+0

@ChristopherShroba Ich denke du könntest. – DyZ

-2

Hinweis: Wie @DYZ in den Kommentaren weist darauf hin, diese Art und Weise dies zu lösen, ist nicht für importlib empfohlen. Lassen Sie es hier für eine andere funktionierende Lösung, aber die Python docs empfehlen "Direkte Verwendung von import() wird auch zugunsten von importlib.import_module()."

Meinst du, dass Sie ein Modul importieren wollen, dessen Name durch eine Variable definiert ist? Wenn ja, können Sie die Methode __import__ verwenden. Zum Beispiel:

>>> import os 
>>> os.getcwd() 
'/Users/christophershroba' 
>>> 
>>> name_to_import = "os" 
>>> variable_module = __import__(name_to_import) 
>>> variable_module.getcwd() 
'/Users/christophershroba' 

Wenn Sie auch eine Variable Verfahren dieser Variablen Modul aufrufen wollen könnten Sie die __getattribute__ Methode auf dem Modul verwenden, um die Funktion zu erhalten, und es dann mit () als normal bezeichnen. Die Zeile unter "Notiz anzeigen" ist nicht erforderlich, ich gebe sie nur an, um anzuzeigen, dass die Methode __getattribute__ eine Funktion zurückgibt.

>>> name_to_import = "os" 
>>> method_to_call = "getcwd" 
>>> variable_module = __import__(name_to_import) 
>>> variable_module.__getattribute__(method_to_call) # See note 
<built-in function getcwd> 
>>> variable_module.__getattribute__(method_to_call)() 
'/Users/christophershroba' 

Weitere verfügbare Dokumentation für Python 3 here oder Python2 here.

+0

https://docs.python.org/3.4/library/functions.html#__import__: Dies ist eine erweiterte Funktion, die im Gegensatz zu 'importlib.import_module()' nicht in der täglichen Python-Programmierung benötigt wird. – DyZ

+0

Die Python 3 Dokumentation sagt ziemlich viel zu "Hinweis Programmatic Import von Modulen sollte import_module() anstelle dieser Funktion verwenden." und die Frage ist mit Python 3 markiert. – pvg

+0

Oh wow. Danke für das! Ich habe nie gemerkt, dass es entmutigt war. Eine Notiz zu meiner Antwort hinzugefügt! –

Verwandte Themen