Importierte Namen sind an den aktuellen Bereich gebunden, sodass ein Import innerhalb einer Funktion nur an einen lokalen Namen gebunden wird.
Wenn Sie unbedingt haben etwas __init__
zu importieren, die dann global verfügbaren sein muss, markieren Sie den importierten Namen als global
zuerst:
>>> def foo():
... global sys
... import sys
...
>>> sys
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
>>> foo()
>>> sys
<module 'sys' (built-in)>
aber dies führt in der Regel zu seltsam und wunderbar schwer Fehler zu lokalisieren . Tun Sie das nicht, machen Sie stattdessen Ihre Importe im Modulbereich.
Wenn Sie den importierten Namen innerhalb anderer Klassen-Methoden benötigen, können Sie auch den importierten Namen einer Instanz Variablen zuweisen:
class Foo(object):
def __init__(self):
import os
self.join = os.path.join
aber wieder, das ist nicht die beste Praxis zu verwenden.
Der Import ist an den Umfang gebunden, in den er importiert wurde ... Ich habe das Gefühl, dass Sie das nicht tun wollen, was ist Ihr Anwendungsfall? –
Warum möchten Sie es nur in '__init __()' importieren, wenn Sie es auch in anderen Bereichen benötigen? –
weil ich eine Klasse mit einer Abhängigkeit habe, und ich möchte, dass diese Abhängigkeit nur geladen wird, wenn jemand diese Klasse verwendet (erstellt eine Instanz) – tapioco123