Ich versuche, einige Module für meinen eigenen Gebrauch zu organisieren. Ich habe so etwas:
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
In lib/__init__.py
möchte ich einige Klassen definieren, die verwendet werden sollen, wenn ich lib importiere. Ich kann es jedoch nicht herausfinden, ohne die Klassen in Dateien zu trennen und sie zu importieren __init__.py
.
Anstatt zu sagen:
lib/
__init__.py
settings.py
helperclass.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
Ich möchte so etwas:
lib/
__init__.py #Helper defined in this file
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib import Helper
Ist es möglich oder muss ich die Klasse in eine andere Datei trennen?
BEARBEITEN
OK, wenn ich lib aus einem anderen Skript importiere, kann ich auf die Helper-Klasse zugreifen. Wie kann ich über settings.py auf die Helper-Klasse zugreifen?
Das Beispiel hier beschreibt Intra-Package-Referenzen. Ich zitiere "Submodule müssen sich oft aufeinander beziehen". In meinem Fall benötigt lib.settings.py den Helper und lib.foo.someobject Zugriff auf Helper. Wo soll ich also die Helper-Klasse definieren?
Antworten:
Das
lib/
übergeordnete Verzeichnis von muss sich in befindensys.path
.Dein '
lib/__init__.py
' könnte so aussehen:Dann sollte das folgende Beispiel funktionieren:
Antwort auf die bearbeitete Version der Frage:
__init__.py
definiert, wie Ihr Paket von außen aussieht. Wenn Sie verwenden müssen ,Helper
insettings.py
definieren dannHelper
in einer anderen Datei zB ‚lib/helper.py
‘.Der Befehl:
Ausgabe:
quelle
Wenn
lib/__init__.py
die Helper-Klasse definiert ist, können Sie in settings.py Folgendes verwenden:Das funktioniert weil. ist das aktuelle Verzeichnis und fungiert aus Sicht des Einstellungsmoduls als Synonym für das lib-Paket. Beachten Sie, dass es nicht erforderlich ist, Helper über zu exportieren
__all__
.(Bestätigt mit Python 2.7.10 unter Windows.)
quelle
Sie setzen sie einfach in __init__.py.
Also mit test / classes.py als:
... und test / __ init__.py ist:
Sie können Test importieren und haben Zugriff auf A, B und Helper
quelle
Fügen Sie so etwas hinzu
lib/__init__.py
from .helperclass import Helper
Jetzt können Sie es direkt importieren:
from lib import Helper
quelle
Bearbeiten, da ich die Frage falsch verstanden habe:
Setzen Sie einfach die
Helper
Klasse ein__init__.py
. Das ist perfekt pythonisch. Es fühlt sich einfach seltsam an, aus Sprachen wie Java zu kommen.quelle
Ja, es ist möglich. Möglicherweise möchten Sie auch
__all__
in__init__.py
Dateien definieren . Es ist eine Liste von Modulen, die importiert werden, wenn Sie dies tunquelle
Vielleicht könnte das funktionieren:
quelle