9

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

6

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

bin/
   main.py
   user.py # здесь находится класс User
   dir.py # здесь находится класс Dir

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

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

5 ответ(ов)

12

Для 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
0

В вашем файле main.py используйте следующий код для импорта класса:

from user import Class

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

Если вы хотите вызвать метод класса Class, вы можете сделать это следующим образом:

Class.method()

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

0

Если в файлах user.py и dir.py нет классов, то строка

from .user import User
from .dir import Dir

не будет работать. В этом случае следует использовать импорт в следующем виде:

from . import user
from . import dir

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

0

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

import util  # импортируем util.py

util.clean()
util.setup(4)

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

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

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

from util import *
clean()
setup(4)
0

Для Python 3+ предположим, что у вас есть такая структура каталогов:

A/
  __init__.py
  bar.py
  foo.py

В вашем файле __init__.py вы можете использовать конструкцию from . import foo. Это позволит вам импортировать модуль foo в файле bar.py.

Пример кода в A/bar.py:

from .foo import YourClass

Обратите внимание на то, что важно использовать точку перед именем модуля foo, чтобы указать, что он находится в том же пакете.

Назначение файлов __init__.py — это включение необязательного кода инициализации, который выполняется при обращении к различным уровням пакета. Всё, что вы помещаете в __init__.py, будет инициализировано во время загрузки пакета.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь