我正在使用Eclipse进行Python编程。
在我的项目中,我有一个文件:main.py.此文件位于项目文件层次结构的根目录中。在root本身中,我创建了一个名为Classes的文件夹,其中我有一个名为PositionWindow.py的类文件。该文件包含一个PositionWindow类,该类本身包含一个名为:Center()。
的函数在main.py中,我想导入这个类[PositionWindow],然后在适当的位置调用该函数中心。
我无法在main.py中正确导入该类,也无法在以后如何调用该函数。
答案 0 :(得分:5)
你似乎还在用java编程。我知道你用了很长时间的java,但这不再是java了。这是蟒蛇......
我建议您至少阅读python basic tutorial(特别是part about packages and modules),这样您就可以学习python,而不是试图猜测语言。
关于项目的结构,this article非常好,并告诉你如何做。
无耻的复制粘贴:
Python项目的文件系统结构
<强>执行:强>
- 将目录命名为与项目相关的内容。例如,如果你的 项目名为“Twisted”,名称为 其源代码的顶级目录 文件
Twisted
。当你发布时, 你应该包括一个版本号 后缀:Twisted-2.5
。- 创建一个目录
Twisted/bin
并将您的可执行文件放在那里,如果您 有什么。不要给他们.py
扩展,即使它们是Python 源文件。不要输入任何代码 他们除了导入和调用一个 主要功能在其他地方定义 在你的项目中。- 如果您的项目可以表示为单个Python源文件,那么请将其放入 进入目录并命名它 与您的项目相关的东西。对于 例如,
Twisted/twisted.py
。如果你 需要多个源文件,创建一个 改为包裹(Twisted/twisted/
, 空着Twisted/twisted/__init__.py
)和地方 你的源文件。例如,Twisted/twisted/internet.py
。- 将您的单元测试放在包的子包中(注意 - 这意味着 单个Python源文件 上面的选项是一个技巧 - 你永远 需要至少一个其他文件 单元测试)。例如,
Twisted/twisted/test/
。当然,制作 它是一个包Twisted/twisted/test/__init__.py
。 将测试放在像Twisted/twisted/test/test_internet.py
。- 添加
Twisted/README
和Twisted/setup.py
来解释和 分别安装你的软件 如果你感觉很好。<强>不强>
- 将您的来源放在名为
src
或lib
的目录中。这很难 无需安装即可运行。- 将您的测试放在Python包之外。这使得很难 针对已安装的运行测试 版本
- 创建一个只有
__init__.py
的包,然后将所有代码放入__init__.py
。只需制作一个模块 而不是包,它更简单。- 尝试提出神奇的黑客攻击,让Python能够导入你的模块 或没有用户添加的包 包含它的目录 导入路径(通过
PYTHONPATH
或 其他一些机制)。你不会 正确处理所有案例和用户 你的时候会生你的气 软件无法正常运行 环境。
答案 1 :(得分:1)
不要在项目的根目录中创建“文件夹”,而是创建一个“包”。只需创建一个名为__init__.py
的空白文件,您就可以在main.py中导入模块。
import Classes.PositionWindow
p = Classes.PositionWindow.PositionWindow()
p.Center()
但是,您应该阅读模块和软件包,因为您的结构表明您的方法可能存在缺陷。首先,类不必像在Java中那样位于单独的.py文件中。此外,您的包/模块/功能/方法都应该是小写的。只有类名应为大写。
答案 2 :(得分:1)
所以你有这个文件布局:
您有两种选择:
要将Classes文件夹添加到Python Path,请将PYTHONPATH设置为环境变量以包含它。这就像你的shell的PATH一样 - 当你导入PositionWindow时,它会查看Python Path中的所有目录来查找它。
或者,如果您添加空白文件:
Classes/__init__.py
您可以在main.py中导入包及其内容:
import Classes.PositionWindow
x = Classes.PositionWindow.Center()