Как импортировать класс в тот же каталог или подкаталог?
У меня есть каталог, в котором хранятся все файлы .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
Ответы
Ответ 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
файл, отличный от ваших файлов, то
из каталога импортировать ваш_файл