Como importar a classe dentro da mesma pasta ou sub-pasta?

tenho uma pasta que armazena todos os ficheiros .py.

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

quero usar aulas de user.py e dir.py em main.py.
Como posso importar estas classes Python para main.py?
Além disso, Como posso importar a classe User se user.py está numa sub-pasta?

bin/
    dir.py
    main.py
    usr/
        user.py
Author: kenorb, 2010-11-10

7 answers

Python 2

Faça um ficheiro vazio chamado __init__.py na mesma pasta que os ficheiros. Isso significará ao Python que é "ok importar deste diretório".

Então, fá-lo...
from user import User
from dir import Dir

O mesmo se aplica se os ficheiros estiverem numa subdiretoria-coloque um __init__.py também na subdiretoria, e depois use declarações de importação regulares, com notação de pontos. Para cada nível de diretório, você precisa adicionar ao caminho de importação.

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

Então, se o directório foi nomeado "classes", então você faria isso:

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

Python 3

Igual ao anterior, mas prefixe o nome do módulo com um . Se não usar uma subdiretoria:

from .user import User
from .dir import Dir
 603
Author: Amber, 2016-04-17 17:29:51
{[[2]} acabei de saber (graças ao comentário do martineau ) que, para importar classes de ficheiros dentro do mesmo directório, iria agora escrever em Python 3:
from .user import User
from .dir import Dir
 88
Author: ecp, 2017-05-23 12:34:54

Na tua main.py:

from user import Class

Onde {[[2]} é o nome da classe que você quer importar.

Se você quiser chamar um método de Class, você pode chamá-lo usando:

Class.method

Lembre-se que deve existir um ficheiro __init__.py vazio na mesma pasta.

 25
Author: user225312, 2015-12-20 22:57:47

Pode importar o módulo e ter acesso através do seu nome se não quiser misturar funções e classes com as suas

import util # imports util.py

util.clean()
util.setup(4)

Ou pode importar as funções e classes para o seu código

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

Pode usar o wildchar * para importar tudo nesse módulo para o seu código

from util import *
clean()
setup(4)
 10
Author: A.Zaben, 2018-01-06 18:14:57

Para tornar mais simples de entender:

Passo 1: vamos para um directório, onde todos serão incluídos

$ cd /var/tmp
Passo 2: Agora vamos fazer um class1.py ficheiro que tem um nome de classe Class1 com algum código
$ cat > class1.py <<\EOF
class Class1:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF
Passo 3: agora vamos fazer um class2.py ficheiro que tem um nome de classe Class2 com algum código
$ cat > class2.py <<\EOF
class Class2:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF
Passo 4: Agora vamos fazer um main.py que será executado uma vez para usar as classes 1 e Class2 de 2 arquivos diferentes
$ 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
Passo 5: executar o programa
$ python main.py

A saída seria

[Class1 OK]: 
[Class2 OK]:
 8
Author: YumYumYum, 2018-03-25 22:59:28
from user import User 
from dir import Dir 
 3
Author: demas, 2010-11-10 07:35:38
Muito breve., Criar um ficheiro __init__.py é uma pasta de classes e depois importá-lo para o seu programa, como se segue
from classes.myscript import *
 0
Author: Shafiq, 2017-01-26 04:00:06