905 Stimmen

Wie importiert man die Klasse innerhalb desselben Verzeichnisses oder Unterverzeichnisses?

Ich habe ein Verzeichnis, in dem alle .py Dateien.

bin/
   main.py
   user.py # where class User resides
   dir.py # where class Dir resides

Ich möchte die Klassen von benutzer.py y dir.py en main.py .
Wie kann ich diese Python-Klassen in main.py ?
Außerdem, wie kann ich die Klasse User wenn benutzer.py in einem Unterverzeichnis liegt?

bin/
    dir.py
    main.py
    usr/
        user.py

1222voto

Amber Punkte 473552

Python 2

Erstellen Sie eine leere Datei namens __init__.py in demselben Verzeichnis wie die Dateien. Das wird Python signalisieren, dass es "ok ist, aus diesem Verzeichnis zu importieren".

Dann tun Sie es einfach...

from user import User
from dir import Dir

Dasselbe gilt, wenn sich die Dateien in einem Unterverzeichnis befinden - setzen Sie ein __init__.py in das Unterverzeichnis und verwenden Sie dann reguläre Importanweisungen mit Punktschreibweise. Für jede Verzeichnisebene müssen Sie dem Importpfad etwas hinzufügen.

bin/
    main.py
    classes/
        user.py
        dir.py

Wenn das Verzeichnis also "classes" heißt, würden Sie so vorgehen:

from classes.user import User
from classes.dir import Dir

Python 3

Wie zuvor, jedoch wird dem Modulnamen ein Präfix . wenn Sie kein Unterverzeichnis verwenden:

from .user import User
from .dir import Dir

175voto

ecp Punkte 2057

Ich habe gerade gelernt (dank der martineau's Kommentar ), dass Sie jetzt in Python 3 schreiben würden, um Klassen aus Dateien im selben Verzeichnis zu importieren:

from .user import User
from .dir import Dir

68voto

lucidbrot Punkte 4566

Ab python3.3 aufwärts, __init__.py es nicht mehr erforderlich . Wenn das aktuelle Verzeichnis der Konsole das Verzeichnis ist, in dem sich das Python-Skript befindet, funktioniert alles problemlos mit

import user

Dies funktioniert jedoch nicht, wenn der Aufruf aus einem anderen Verzeichnis erfolgt, das keine user.py .
In diesem Fall verwenden Sie

from . import user

Das funktioniert auch, wenn Sie die gesamte Datei importieren wollen und nicht nur eine Klasse daraus.

51voto

user225312 Punkte 117771

In Ihrem main.py :

from user import Class

wobei Class ist der Name der Klasse, die Sie importieren möchten.

Wenn Sie eine Methode von Class können Sie es mit aufrufen:

Class.method

Beachten Sie, dass es eine leere __init__.py Datei im selben Verzeichnis.

19voto

Andreas Foteas Punkte 332

Wenn user.py und dir.py keine Klassen enthalten, dann

from .user import User
from .dir import Dir

funktioniert nicht. Sie sollten dann importieren als

from . import user
from . import dir

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X