在包中定义类

时间:2010-06-11 16:28:06

标签: python class module packages

我正在学习Python,而且我一直在玩包。我想知道在包中定义类的最佳方法。似乎在包中定义类的唯一方法是在该包的__init__.py中定义它们。来自Java,我有点想为我的类定义单个文件。这是推荐的做法吗?

我希望我的目录看起来像这样:

recursor/
    __init__.py
    RecursionException.py
    RecursionResult.py
    Recursor.py

所以我可以将我的课程称为recursor.Recursorrecursor.RecursionExceptionrecursor.RecursionResult。这在Python中是可行的还是推荐的?

3 个答案:

答案 0 :(得分:9)

继续并在单独的模块中定义您的类。然后让__init__.py做类似的事情:

from RecursionException import RecursionException
from RecursionResult import RecursionResult
from Recursor import Recursor

这会将每个类导入到包的根命名空间中,因此调用代码可以引用recursor.Recursor而不是recursor.Recursor.Recursor

我觉得有必要在这里回应一些其他评论:Python不是Java。我建议不要在阳光下为每个类创建一个新模块,而是将密切相关的类分组到一个模块中。通过这种方式更容易理解您的代码,并且调用代码不需要大量的导入。

答案 1 :(得分:2)

这是完全可行的。只需为每个类创建一个新的类模块,并创建您发布的结构。

你也可以创建一个Recursion.py模块或类似的东西,并在该文件中包含所有3个类。

(我也是Java的新手,我还没有在我的__init__.py文件中添加任何内容......)

答案 2 :(得分:1)

在Python中,您不仅限于为每个文件定义1个类,而且很少这样做。如果你愿意,你可以 - 这完全取决于你。 Python中的Package只是一个带

的目录
__init__.py 

文件。您不必在该文件中放置任何内容即可控制导入的内容等。