Ich habe ein Verzeichnis, in dem alle .py -Dateien gespeichert sind.
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Ich möchte Klassen aus user.py und dir.py in main.py verwenden.
Wie kann ich diese Python-Klassen in main.py importieren?
Außerdem kann ich die Klasse User
importieren, wenn user.py in einem Unterverzeichnis liegt.
bin/
dir.py
main.py
usr/
user.py
Erstellen Sie eine leere Datei mit dem Namen __init__.py
im selben Verzeichnis wie die Dateien. Dies bedeutet für Python, dass es "in Ordnung ist, aus diesem Verzeichnis zu importieren".
Dann mach einfach ...
from user import User
from dir import Dir
Dasselbe gilt, wenn sich die Dateien in einem Unterverzeichnis befinden - geben Sie auch einen __init__.py
in das Unterverzeichnis ein und verwenden Sie dann reguläre Importanweisungen mit Punktnotation. Für jede Verzeichnisebene müssen Sie den Importpfad hinzufügen.
bin/
main.py
classes/
user.py
dir.py
Wenn das Verzeichnis "Klassen" heißt, würden Sie Folgendes tun:
from classes.user import User
from classes.dir import Dir
Wie vorher, aber fügen Sie dem Modulnamen einen .
voran, wenn Sie kein Unterverzeichnis verwenden:
from .user import User
from .dir import Dir
Ich habe gerade gelernt (danke martineaus Kommentar ), dass Sie zum Importieren von Klassen aus Dateien in demselben Verzeichnis jetzt in Python 3 schreiben würden:
from .user import User
from .dir import Dir
In Ihrem main.py
:
from user import Class
dabei ist Class
der Name der Klasse, die Sie importieren möchten.
Wenn Sie eine Methode von Class
aufrufen möchten, können Sie sie aufrufen mit:
Class.method
Beachten Sie, dass sich im selben Verzeichnis eine leere __init__.py
-Datei befinden sollte.
Sie können das Modul importieren und über den Namen darauf zugreifen, wenn Sie Funktionen und Klassen nicht mit Ihren kombinieren möchten
import util # imports util.py
util.clean()
util.setup(4)
oder Sie können die Funktionen und Klassen in Ihren Code importieren
from util import clean, setup
clean()
setup(4)
sie können wildchar * verwenden, um alles in diesem Modul in Ihren Code zu importieren
from util import *
clean()
setup(4)
Um es verständlicher zu machen:
Schritt 1: Gehen Sie zu einem Verzeichnis, in dem alle enthalten sind
$ cd /var/tmp
Schritt 2: Jetzt können wir eine class1.py-Datei erstellen, die einen Klassennamen Class1 mit etwas Code hat
$ cat > class1.py <<\EOF
class Class1:
OKBLUE = '\033[94m'
ENDC = '\033[0m'
OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF
Schritt 3: Jetzt können wir eine class2.py-Datei erstellen, die einen Klassennamen Class2 mit etwas Code hat
$ cat > class2.py <<\EOF
class Class2:
OKBLUE = '\033[94m'
ENDC = '\033[0m'
OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF
Schritt 4: Jetzt machen wir ein main.py, das einmal ausgeführt wird, um Class1 und Class2 aus zwei verschiedenen Dateien zu verwenden
$ cat > main.py <<\EOF
"""this is how we are actually calling class1.py and from that file loading Class1"""
from class1 import Class1
"""this is how we are actually calling class2.py and from that file loading Class2"""
from class2 import Class2
print Class1.OK
print Class2.OK
EOF
Schritt 5: Führen Sie das Programm aus
$ python main.py
Die Ausgabe wäre
[Class1 OK]:
[Class2 OK]:
from user import User
from dir import Dir
In Python3 ist __init__.py
nicht mehr erforderlich . Wenn das aktuelle Verzeichnis der Konsole das Verzeichnis ist, in dem sich das Skript python befindet, funktioniert alles einwandfrei
import user
Dies funktioniert jedoch nicht, wenn es aus einem anderen Verzeichnis aufgerufen wird, das user.py
nicht enthält.
Verwenden Sie in diesem Fall
from . import user
Dies funktioniert auch, wenn Sie die gesamte Datei anstatt nur einer Klasse von dort importieren möchten.
Python 3
Gleiche directory
.
importdatei: log.py
importklasse: SampleApp()
.
import log
if __== "__main__":
app = log.SampleApp()
app.mainloop()
oder
das Verzeichnis ist basic
.
import in Datei: log.py
.
importklasse: SampleApp()
.
from basic import log
if __== "__main__":
app = log.SampleApp()
app.mainloop()
Einfach zu kurz Erstellen Sie eine Datei __init__.py
ist ein Klassenverzeichnis und importieren Sie sie wie folgt in Ihr Skript
from classes.myscript import *
aus demselben Verzeichnis importieren
from . import the_file_you_want_to_import
zum importieren aus dem unterverzeichnis sollte das verzeichnis enthalten
init. py
datei anders als Sie Dateien dann
aus dem Verzeichnis importiere deine_datei