Oft mache ich in meinen persönlichen Python-Bibliotheken so etwas:
class MyClass:
# ...
def plot(self):
import someGraphicsLibrary as graphicslib
graphicslib.plot(self.data)
Der Grund dafür ist, dass die Initialisierung someGraphicsLibrary
einige Zeit in Anspruch nimmt, bis zu einigen Sekunden für eine der von mir verwendeten Bibliotheken. Ich muss meine Ergebnisse nicht immer zeichnen, wenn ich diese Klasse verwende. Daher ist es sinnvoll, sie erst dann zu importieren, wenn sie tatsächlich verwendet wird, wenn überhaupt.
Dies scheint gut zu funktionieren, aber ich glaube nicht, dass ich es im Code eines anderen gesehen habe. Meine Frage ist also einfach, ob dies als gute Praxis angesehen wird. Gibt es versteckte Fallstricke, die zu erwarten sind, wenn man die Dinge so macht?
Antworten:
Dies ist aus mehreren Gründen normalerweise keine gute Praxis:
Manchmal ist dies jedoch eine gute Idee, zum Beispiel:
numpy
in Ihrer__array__()
Methode verwenden. Möglicherweise möchten Sie sich jedoch nicht aufnumpy
die anderen Funktionen Ihres Moduls verlassen. Es ist daher besser, nurnumpy
innerhalb von__array__()
zu importieren , um die zusätzliche Abhängigkeit zu vermeiden, wenn sie nicht benötigt wird. Dies leidet nicht unter den Problemen 1 und 2, danumpy
es bereits einmal importiert wurde (es ist das, was__array__()
an erster Stelle aufgerufen wird!), Und es leidet nicht unter Problem 3, danumpy
es sich nicht um eine "echte" Abhängigkeit Ihres Moduls handelt.import pdb; pdb.set_trace()
. Sie möchten nichtimport pdb
an die Spitze des Moduls setzen, da der Haltepunkt eine temporäre Codezeile ist, die gelöscht wird. Wenn Sie den Import weit weg verschieben, wird dies unnötig schwierig. Dies war veraltet, als das eingebaute Systembreakpoint()
hinzugefügt wurde, sodass Sie jetzt keinen Inline-Import benötigen.quelle
MyClass
ist kein aussagekräftiges Substantiv, also denke ich, dass Sie zu Schlussfolgerungen springen.