我是stackoverflow和Python的新手,很抱歉这些错误。在
我在这个项目目录中有game.py
。在
我有两个类,CardClass和CardDeckClass在classes子目录中。在
CardDeckClass使用CardClass。在
/project/game.py
/project/classes/CardClass.py
/project/classes/CardDeckClass.py
将CardDeckClass导入到game.py
时遇到问题
到目前为止,我已经试过了:
^{pr2}$上面给出了第二行的一个错误CardDeckClass.py:from CardClass import CardClass
重要错误:没有名为“CardClass”的模块
关于如何解决这个问题有什么建议或想法吗?谢谢!在
通常子目录
classes
不在默认导入路径上。如果要从非标准子目录导入类,则必须将其添加到以下路径:虽然DYZ的答案很有效,但我认为这给了你非常糟糕的建议。如果您将}模块。您可以在顶层直接按名称获取它们(例如,
classes
文件夹添加到Python模块搜索路径,那么现在可以用两种不同的方式找到CardClass
和{import CardClass
),也可以通过classes
包(使用import classes.CardClass
)获取。在这种模糊性很糟糕,因为Python不会意识到这两个不同的名称应该指同一个事物。取而代之的是,你会得到所有东西的两个副本,这可能会让你很困惑。例如,
isinstance(CardClass.CardClass(), classes.CardClass.CardClass)
将是False
。在相反,您应该修复
CardDeckClass.py
中的导入,以正确导入CardClass
。有两种方法可以做到这一点,而你想要的是风格问题(没有一个正确的选择)。您可以使用绝对导入,除了命名模块名称外,还可以命名包:或者也可以使用显式相对导入
^{pr2}$注意模块名开头的点,它告诉Python在当前包中开始搜索。在
您可能没有意识到,将
CardClass.py
和CardDeckClass.py
文件放在一个文件夹中,就是在为它们创建一个包。在早期版本的Python中(python3.3之前),您需要在文件夹中添加一个名为__init__.py
的文件,然后它才能作为一个包工作。这已经不再是必要的(因为有点模糊的原因,它被改变了,参见PEP 420和它所指的政治公众人物)。仍然建议您添加一个__init__.py
文件,因为您通常不需要您的包是“命名空间包”(如果您不知道什么是命名空间包,则不需要它)。在最后一个建议:模块命名方案建议您创建的每个模块中只有一个类。这在Python中通常是不好的风格。与Java等其他语言不同,Python模块中有许多类、函数和其他东西是很正常的。过多地拆分代码会使导入变得比需要的复杂得多。在这种情况下,}模块几乎可以肯定地组合在一起,因为它们处理的是密切相关的对象。将它们组合到您的
CardClass
和{game.py
文件中可能是最有意义的,不过单独的cards
模块也可以。几乎可以肯定的是这里不需要一个包裹。在相关问题 更多 >
编程相关推荐