Подтвердить что ты не робот

Как импортировать класс в тот же каталог или подкаталог?

У меня есть каталог, в котором хранятся все файлы .py.

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

Я хочу использовать классы из user.py и dir.py в main.py.
Как импортировать эти классы Python в main.py?
Кроме того, как я могу импортировать класс User, если user.py находится в подкаталоге?

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

Ответ 1

Python 2

Сделайте пустой файл с именем __init__.py в том же каталоге, что и файлы. Это будет означать, что Python "нормально импортировать из этого каталога".

Тогда просто сделайте...

from user import User
from dir import Dir

То же самое верно, если файлы находятся в подкаталоге - поместите также __init__.py в подкаталог, а затем используйте регулярные операторы импорта с точечной нотацией. Для каждого уровня каталога вам нужно добавить путь импорта.

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

Итак, если каталог был назван "classes", вы бы сделали это:

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

Python 3

Аналогично предыдущему, но префикс имени модуля ., если не используется подкаталог:

from .user import User
from .dir import Dir

Ответ 2

Я только что узнал (спасибо комментарий martineau), что для того, чтобы импортировать классы из файлов в один и тот же каталог, вы теперь должны писать в Python 3:

from .user import User
from .dir import Dir

Ответ 3

В main.py:

from user import Class

где Class - это имя класса, который вы хотите импортировать.

Если вы хотите вызвать метод Class, вы можете вызвать его, используя:

Class.method

Обратите внимание, что в том же каталоге должен быть пустой файл __init__.py.

Ответ 4

Вы можете импортировать модуль и получить доступ через его имя, если не хотите смешивать функции и классы с вашими.

import util # imports util.py

util.clean()
util.setup(4)

или вы можете импортировать функции и классы в свой код

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

вы можете использовать wildchar *, чтобы импортировать все в этом модуле в ваш код

from util import *
clean()
setup(4)

Ответ 5

Чтобы было проще понять:

Шаг 1: давайте перейдем в один каталог, где все будет включено

$ cd /var/tmp

Шаг 2: теперь давайте создадим файл class1.py с именем класса Class1 с некоторым кодом

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

Шаг 3: теперь давайте создадим файл class2.py с именем класса Class2 с некоторым кодом

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

Шаг 4: теперь давайте создадим один main.py, который будет выполняться один раз, чтобы использовать Class1 и Class2 из 2 разных файлов.

$ 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

Шаг 5: Запустите программу

$ python main.py

Выход будет

[Class1 OK]: 
[Class2 OK]:

Ответ 6

from user import User 
from dir import Dir 

Ответ 7

Python 3


Тот же directory.

импортировать файл: log.py

класс импорта: SampleApp().

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

или же

каталог является basic.

импорт в файл: log.py

класс импорта: SampleApp().

from basic import log
if __name__ == "__main__":
    app = log.SampleApp()
    app.mainloop()

Ответ 8

В python3 __init__.py больше не нужен. Если текущим каталогом консоли является каталог, в котором находится скрипт Python, все работает нормально

import user

Однако это не будет работать, если вызывается из другого каталога, который не содержит user.py
В этом случае используйте

from . import user

Это работает, даже если вы хотите импортировать весь файл, а не просто класс оттуда.

Ответ 9

Если user.py и dir.py не включают классы, то

from .user import User
from .dir import Dir

не работает. Затем вы должны импортировать как

from . import user
from . import dir

Ответ 10

Просто слишком кратко, создайте файл __init__.py в каталоге классов, а затем импортируйте его в свой сценарий, как показано ниже (Импортировать все регистры)

from classes.myscript import *

Импортировать только выбранные классы

from classes.myscript import User
from classes.myscript import Dir

Ответ 11

импортировать из той же директории

from . import the_file_you_want_to_import 

для импорта из подкаталога каталог должен содержать

init.py

файл, отличный от ваших файлов, то

из каталога импортировать ваш_файл