【问题标题】:Import class from folder python从文件夹 python 导入类
【发布时间】:2020-04-26 12:22:05
【问题描述】:

请不要立即将此标记为重复的问题,因为我已经以相同的想法查看了许多过去的问题,但我不明白任何答案 - 它们充其量只是有点小而且涉及制作文件在我认为的文件夹中调用 init.py ?我不知道。

所以我的具体问题是:我正在尝试为二十一点编写程序。我已经创建了一个类来在单独的文件中创建卡片组。我将所有内容都放在同一个文件夹中,称为“类”。在这个文件夹中,有: - 一个名为 __init.py 的文件(空的,因为我不知道它应该做什么) - 一个名为playcardsclasses.py 的文件,包含Card 和Deck 类 - 一个名为 blackjack.py 的文件,这是我编写主程序的地方。 我正在使用 Pycharm,它会立即抛出一个 Traceback,但仍然像我想要的那样运行代码 - 所以我不知道它为什么会中断。 我的代码的第一行是:

    from playingcardsclasses.py import Deck

回溯说:

Traceback(最近一次调用最后一次): 文件“(目录)/classes/blackjack.py”,第 1 行,在 从playcardsclasses.py导入甲板 ModuleNotFoundError:没有名为“playingcardsclasses.py”的模块; 'playingcardsclasses' 不是一个包

然后继续愉快地运行我的其余代码,然后以一个

结束

进程以退出代码 1 结束

message - 即这里有问题,因此是回溯。

【问题讨论】:

  • 对于初学者,在导入模块时删除.py 部分。此外,如果您已经查看了其他 SO 问题,最好在您的问题中提及(链接)它们,并告诉我们在您尝试这些问题的给定答案时究竟是什么对您没有帮助。这将有助于我们不给您已经尝试过的答案。
  • ReadTheFineTutorial: modules

标签: python file class import pycharm


【解决方案1】:

首先,classes 目录中的__init__.py 文件的语法不正确。应该是__init__.py,而不是__init.py

在一个目录中有__init__.py文件的原因是告诉python这个目录应该被当作一个包来对待。即,可以从此目录导入其他.py 文件。 (见here

在您的情况下,由于您的 playingcardsclasses.py 文件包含两个类,CardDeck,您可以从另一个文件中导入它们。假设您在同一目录中名为my_file.py 的另一个文件中。如果你想从playingcardsclasses.py 导入Deck 类,你可以使用:

from .playingcardsclasses import Deck

请注意,在导入时,您永远不应使用尾随 .py,这是您在代码块中犯的错误。

编辑:还要注意导入中的前导 .。这只是指定文件playingcardsclasses.py 位于同一目录中。

【讨论】:

  • init 而不是 __init 是一个错字,但谢谢!那么,如果该文件为空,可以吗?你只是省略了 .py 还是有更复杂的东西?
  • 嗯,好吧,显然双下划线代表堆栈中的粗体?这有点不方便。此外,我的代码仍然无法正常工作 - 它是这样说的:
  • 回溯(最近一次通话最后):文件“/Users/charliefranklin/Google Drive/CS Charlie Franklin/Programs/CS work/Classes/__main__/Blackjack.py”,第 1 行,在 from .playingcardsclasses import Deck ModuleNotFoundError: No module named 'main.playingcardsclasses'; 'main' 不是包
  • 当它是粗体时应该被双下划线包围
  • 好的,所以我去掉了前面的句号,它可以工作了。所以我现在的行是:
猜你喜欢
  • 2018-08-19
  • 2013-02-19
  • 2020-05-09
  • 1970-01-01
  • 2013-08-26
  • 2018-07-19
  • 1970-01-01
  • 2016-02-19
  • 2021-11-28
相关资源
最近更新 更多