我有以下目录结构:
ican/
__init__.py
haz/
__init__.py
apple.py
grape/
__init.py
grape.py
其中apple.py
和{myapple = ican.haz.apple()
或mygrape = ican.haz.grape()
的方式加载一个fruit类。在
加载此类类的正确目录结构和import
结构是什么?我也尝试过类似import ican.haz as icanhaz
的方法,然后调用myapple = icanhaz.apple()
。我希望将我所有的类放在同一个位置,并通过类似ican.haz.<class>
的方式加载它们。在
你混淆了两个概念。python“模块”是一个包含可以导入的python代码的文件。python“类”是可以在模块中定义的东西。在
在您的示例中,}是模块。不能通过执行
apple
和{apple()
之类的操作来调用模块,这是不允许的。您需要导入模块中包含的类。在所以假设
apple.py
中定义了一个GetApple
类。所以apple.py
看起来是这样的:模块也可以有函数,因此可以使用
^{pr2}$GetApple
函数:模块也可以有变量。它们可以有任意数量的变量、类和函数。您可以单独导入它们(例如使用
from apple import GetApple
),也可以导入模块并从模块import apple
访问它们。但是不能只导入模块中的函数或和类,然后再调用它(至少不是以任何合理的方式)。在对于您的目录结构,您可以使用以下任一方法运行它:
而且,根据您的
__init__.py
文件,还可能:对于
grape.py
,假设有一个相应的类,这类事情会起作用:也要穿制服
a)
apple.py
应该在apple
文件夹中低一级,或者b)
grape.py
应该高一级,而不是在它自己的grape
文件夹中。在那么您的导入将是}(对于选项a);或者{}(对于选项b)。在
from ican.haz.apple import Apple
和{要获得所需的结构,请使用optionb并修改
haz
下的init
。在haz/__init__.py
:您可以将其导入为
import ican.haz.*
(尽管被认为是坏样式)。而且它是~弄乱模块vs类名~,因为类名被更正了。最好将下面的一行与选项a或b一起使用顺便说一句,根据你目前的结构,进口量需要是:
^{pr2}$相关问题 更多 >
编程相关推荐