导入类并调用方法

时间:2011-01-11 00:16:30

标签: python

我正在使用Eclipse进行Python编程。

在我的项目中,我有一个文件:main.py.此文件位于项目文件层次结构的根目录中。在root本身中,我创建了一个名为Classes的文件夹,其中我有一个名为PositionWindow.py的类文件。该文件包含一个PositionWindow类,该类本身包含一个名为:Center()。

的函数

在main.py中,我想导入这个类[PositionWindow],然后在适当的位置调用该函数中心。

我无法在main.py中正确导入该类,也无法在以后如何调用该函数。

3 个答案:

答案 0 :(得分:5)

你似乎还在用java编程。我知道你用了很长时间的java,但这不再是java了。这是蟒蛇......

  • Python没有目录。它有packages
  • Python没有类文件。它有modules
  • 您可以在模块中拥有多个类。
  • 您可以在一个包中包含多个模块。

我建议您至少阅读python basic tutorial(特别是part about packages and modules),这样您就可以学习python,而不是试图猜测语言。

关于项目的结构,this article非常好,并告诉你如何做。

无耻的复制粘贴:

  

Python项目的文件系统结构

     

Jp Calderone

     

<强>执行:

     
      
  • 将目录命名为与项目相关的内容。例如,如果你的   项目名为“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/READMETwisted/setup.py来解释和   分别安装你的软件   如果你感觉很好。
  •   
     

<强>不

     
      
  • 将您的来源放在名为srclib的目录中。这很难   无需安装即可运行。
  •   
  • 将您的测试放在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)

所以你有这个文件布局:

  • /main.py
  • /Classes/PositionWindow.py(里面有中心)

您有两种选择:

  • 将“类”添加到Python路径,允许您直接导入PositionWindow.py。
  • 使“Classes”成为一个包(可能名字更好)。

要将Classes文件夹添加到Python Path,请将PYTHONPATH设置为环境变量以包含它。这就像你的shell的PATH一样 - 当你导入PositionWindow时,它会查看Python Path中的所有目录来查找它。

或者,如果您添加空白文件:

Classes/__init__.py

您可以在main.py中导入包及其内容:

import Classes.PositionWindow
x = Classes.PositionWindow.Center()