在包中定义类

11 投票
3 回答
6183 浏览
提问于 2025-04-15 23:51

我正在学习Python,并且在尝试使用一些包。我想知道在包中定义类的最佳方式是什么。似乎在包中定义类的唯一方法就是在这个包的__init__.py文件里定义它们。因为我之前是用Java的,所以我希望能为我的类定义单独的文件。这种做法推荐吗?

我希望我的目录结构大致是这样的:

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

这样我就可以像这样引用我的类:recursor.Recursorrecursor.RecursionExceptionrecursor.RecursionResult。在Python中这样做可行吗?推荐吗?

3 个回答

1

在Python中,你并不需要每个文件只定义一个类,很多人并不是这样做的。不过如果你想这样做,也是可以的,完全看你自己。Python中的包其实就是一个包含了一个

__init__.py 

文件的文件夹。你可以选择在这个文件里放一些东西,用来控制哪些内容可以被导入等等。

2

这完全是可以做到的。只需要为每一个类创建一个新的模块,然后按照你发的结构来创建就行。

你也可以创建一个叫做 Recursion.py 的模块,或者其他类似的名字,把这三个类都放在那个文件里。

(我也是刚从 Java 转到 Python,还没在我的 __init__.py 文件里放任何东西……)

10

你可以把你的类定义在不同的模块里。然后让 __init__.py 文件做一些这样的事情:

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

这样做会把每个类导入到这个包的根命名空间里,这样在调用的时候,你就可以用 recursor.Recursor 来引用,而不是 recursor.Recursor.Recursor

不过,我觉得有必要重申一下其他人的一些观点:Python 和 Java 是不一样的。与其为每个类都创建一个新的模块,不如把紧密相关的类放在一个模块里。这样你的代码会更容易理解,而且调用的时候也不需要写一大堆导入语句。

撰写回答