Импортировать класс из папки python - PullRequest
0 голосов
/ 09 января 2020

Пожалуйста, не сразу помечайте это как дублирующий вопрос, потому что я просмотрел множество прошлых вопросов с одной и той же идеей, но я не понимаю ни одного из ответов - они в лучшем случае крошечные и требуют создания файла называется init .py в папке я думаю? Я не уверен.

Итак, моя конкретная проблема c заключается в следующем: я пытаюсь написать программу для блэкджека. Я уже создал класс для создания колод карт в отдельном файле. У меня все в одной папке, называется "классы". В этой папке есть: - файл с именем __init.py (пустой, потому что я не знаю, что он должен делать) - файл с названием playingcardsclasses.py, содержащий классы Card и Deck - файл с именем blackjack.py, который где я пишу свою основную программу. Я использую Pycharm, и он немедленно выбрасывает Traceback, но все равно запускает код так, как я хочу - поэтому я не знаю, почему он ломается. Первая строка моего кода:

    from playingcardsclasses.py import Deck

В трассировке написано:

Traceback (последний вызов был последним): файл "(directory) /classes/blackjack.py", строка 1 , из файла playscardsclasses.py import Deck ModuleNotFoundError: Нет модуля с именем playingcardsclasses.py; 'playingcardsclasses' - это не пакет

, а затем он успешно проходит через весь мой код, прежде чем завершить процесс

, завершившимся с кодом выхода 1

- то есть здесь проблема, отсюда и след.

1 Ответ

1 голос
/ 09 января 2020

Во-первых, синтаксис вашего __init__.py файла в каталоге classes неверен. Это должно быть __init__.py, а не __init.py.

. Причиной для файла __init__.py в каталоге является указание python, что этот каталог следует рассматривать как пакет. То есть, другие .py файлы могут быть импортированы из этого каталога. (см. здесь )

В вашем случае, поскольку ваш файл playingcardsclasses.py содержит два класса, Card и Deck, вы можете импортировать их из другого файла. Допустим, вы находитесь в другом файле в том же каталоге с именем my_file.py. Если вы хотите импортировать класс Deck из playingcardsclasses.py, вы должны использовать:

from .playingcardsclasses import Deck

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

Редактировать: также обратите внимание на ведущий . в импорте. Это просто указывает, что файл playingcardsclasses.py находится в том же каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...