web-dev-qa-db-fra.com

Comment importer la classe dans le même répertoire ou sous-répertoire?

J'ai un répertoire qui stocke tous les fichiers .py .

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

Je veux utiliser les classes de user.py et dir.py in main.py .
Comment puis-je importer ces classes Python dans main.py ?
De plus, comment puis-je importer la classe User si user.py se trouve dans un sous-répertoire?

bin/
    dir.py
    main.py
    usr/
        user.py
462
Bin Chen

Python 2

Créez un fichier vide appelé __init__.py dans le même répertoire que les fichiers. Cela signifiera à Python qu'il est "ok d'importer à partir de ce répertoire".

Alors fais juste ...

from user import User
from dir import Dir

Il en va de même si les fichiers se trouvent dans un sous-répertoire - mettez également un __init__.py dans le sous-répertoire, puis utilisez des instructions d'importation régulières, avec notation à points. Pour chaque niveau de répertoire, vous devez ajouter le chemin d'importation. 

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

Donc, si le répertoire s'appelle "classes", alors vous feriez ceci:

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

Python 3

Identique à la précédente, mais préfixez le nom du module avec un . si vous n'utilisez pas de sous-répertoire:

from .user import User
from .dir import Dir
675
Amber

Je viens d'apprendre (grâce au commentaire de martineau ) que, pour importer des classes à partir de fichiers d'un même répertoire, vous écririez maintenant en Python 3:

from .user import User
from .dir import Dir
103
ecp

Dans votre main.py:

from user import Class

Class est le nom de la classe que vous souhaitez importer.

Si vous souhaitez appeler une méthode de Class, vous pouvez l’appeler de la manière suivante:

Class.method

Notez qu'il doit y avoir un fichier __init__.py vide dans le même répertoire. 

27
user225312

Vous pouvez importer le module et y accéder par son nom si vous ne souhaitez pas mélanger des fonctions et des classes avec le vôtre.

import util # imports util.py

util.clean()
util.setup(4)

ou vous pouvez importer les fonctions et les classes dans votre code 

from util import clean, setup
clean()
setup(4)

vous pouvez utiliser wildchar * pour importer tout le contenu de ce module dans votre code

from util import *
clean()
setup(4)
10
A.Zaben

Pour le rendre plus simple à comprendre:

Étape 1: permet d’aller dans un répertoire, où tout sera inclus

$ cd /var/tmp

Étape 2: permet maintenant de créer un fichier class1.py qui porte un nom de classe Class1 avec du code

$ cat > class1.py <<\EOF
class Class1:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF

Étape 3: permet maintenant de créer un fichier class2.py qui porte un nom de classe Class2 avec du code

$ cat > class2.py <<\EOF
class Class2:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF

Étape 4: permet maintenant de créer un fichier main.py qui sera exécuté une fois pour utiliser Class1 et Class2 à partir de 2 fichiers différents

$ 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

Étape 5: Exécuter le programme

$ python main.py

La sortie serait

[Class1 OK]: 
[Class2 OK]:
8
YumYumYum
from user import User 
from dir import Dir 
4
demas

En python3, __init__.py est n'est plus nécessaire . Si le répertoire en cours de la console est le répertoire dans lequel se trouve le script python, tout fonctionne correctement.

import user

Cependant, cela ne fonctionnera pas s'il est appelé depuis un autre répertoire, qui ne contient pas user.py.
Dans ce cas, utilisez

from . import user

Cela fonctionne même si vous souhaitez importer le fichier entier au lieu d'une classe à partir de là.

2
lucidbrot

Python 3


Idem directory.

fichier d'importation: log.py

classe d'importation: SampleApp().

import log
if __== "__main__":
    app = log.SampleApp()
    app.mainloop()

ou

le répertoire est basic.

importer dans le fichier: log.py.

classe d'importation: SampleApp().

from basic import log
if __== "__main__":
    app = log.SampleApp()
    app.mainloop()
1
Yasith Praharshana

Tout simplement trop bref, Créez un fichier __init__.py est le répertoire classes, puis importez-le dans votre script comme suit

from classes.myscript import *
0
Shafiq

importer depuis le même répertoire

from . import the_file_you_want_to_import 

importer du sous répertoire le répertoire doit contenir

init. py

fichier autre que vous fichiers alors

depuis le répertoire import your_file

0
rojo_hlerr