Как импортировать класс в том же каталоге или подкаталоге?
у меня есть каталог, в котором хранятся все .py файлы.
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Я хочу использовать классы из user.py и dir.py in main.py.
Как я могу импортировать эти классы Python вmain.py?
Кроме того, как я могу импортировать класс User
если user.py находится в подкаталоге?
bin/
dir.py
main.py
usr/
user.py
7 ответов:
Python 2
сделать пустой файл под названием
__init__.py
в том же каталоге, что и файлы. Это будет означать для Python, что"нормально импортировать из этого каталога".тогда просто сделайте...
from user import User from dir import Dir
то же самое верно, если файлы находятся в подкаталоге - put an
__init__.py
в подкаталоге, а затем использовать регулярные операторы импорта, с точечной нотацией. Для каждого уровня каталога необходимо добавить путь импорта.bin/ main.py classes/ user.py dir.py
так что если каталог был назван "классы", то вы бы сделали это:
from classes.user import User from classes.dir import Dir
Python 3
то же, что и предыдущий, но префикс имя модуля с
.
если не использовать подкаталог:from .user import User from .dir import Dir
Я только что узнал (спасибо Мартино комментарий) что, для того чтобы импортировать классы из файлов в том же каталоге, вы бы теперь писать в Python 3:
from .user import User from .dir import Dir
в своем
main.py
:from user import Class
здесь
Class
- это имя класса, который вы хотите импортировать.если вы хотите вызвать метод
Class
, вы можете назвать его с помощью:
Class.method
обратите внимание, что должен быть пустой
__init__.py
файл в том же каталоге.
вы можете импортировать модуль и иметь доступ через его имя, если вы не хотите смешивать функции и классы с вашим
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)
чтобы было проще понять:
Шаг 1: давайте перейдем в один каталог, где все будут включены
$ cd /var/tmp
Шаг 2: Теперь давайте сделаем class1.py файл, который имеет имя класса Class1 с некоторым кодом
$ cat > class1.py <<\EOF class Class1: OKBLUE = '3[94m' ENDC = '3[0m' OK = OKBLUE + "[Class1 OK]: " + ENDC EOF
Шаг 3: Теперь давайте сделаем class2.py файл, который имеет имя класса Class2 с некоторым кодом
$ cat > class2.py <<\EOF class Class2: OKBLUE = '3[94m' ENDC = '3[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]: