Python 在包中定义类

Python 在包中定义类,python,class,module,packages,Python,Class,Module,Packages,我正在学习Python,并且一直在使用软件包。我想知道在包中定义类的最佳方法。似乎在包中定义类的唯一方法是在该包的\uuuu init\uuuuuuuupy中定义它们。来自Java,我有点想为我的类定义单独的文件。这是推荐的做法吗 我希望我的目录看起来像这样: recursor/ __init__.py RecursionException.py RecursionResult.py Recursor.py from RecursionException imp

我正在学习Python,并且一直在使用软件包。我想知道在包中定义类的最佳方法。似乎在包中定义类的唯一方法是在该包的
\uuuu init\uuuuuuuupy
中定义它们。来自Java,我有点想为我的类定义单独的文件。这是推荐的做法吗

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

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

因此,我可以将我的类称为
recursor.recursor
recursor.RecursionException
,以及
recursor.RecursionResult
。这在Python中是可行的还是推荐的?

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

您还可以创建一个Recursion.py模块或类似的模块,并在该文件中包含所有3个类


(我也是Java的Python新手,我还没有在我的
\uuu init\uuuu.py
文件中放入任何内容…

在Python中,您不局限于为每个文件定义一个类,很少有人这样做。你可以,如果你想的话-这完全取决于你。Python中的包只是一个带有

__init__.py 

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

继续,在单独的模块中定义您的类。然后让
\uuuu init\uuuuu.py
执行如下操作:

recursor/
    __init__.py
    RecursionException.py
    RecursionResult.py
    Recursor.py
from RecursionException import RecursionException
from RecursionResult import RecursionResult
from Recursor import Recursor
这将把每个类导入包的根命名空间,因此调用代码可以引用
recursor.recursor
,而不是
recursor.recursor.recursor


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

强制性:也可以检查是,但不应该。如果我创建上面的目录布局,在Recursor.py文件中定义我的Recursor类,并尝试导入“Recursor.Recursor”,我会得到一个导入错误。我做错了什么?@rfkrocktk-您可能必须指定recursor.recursor.recursor。。。第一个用于包,第二个用于模块(文件),第三个用于实际类。。。(有时考虑使用模块排序作为包是更好的,而不是将这3个类的包递归器作为单独的文件,您可以在其内部拥有一个具有3个类的模块递归器),尽管<代码>递归。递归。递归/代码>确实具有一定的魅力。