在包中定义类
我正在学习Python,并且在尝试使用一些包。我想知道在包中定义类的最佳方式是什么。似乎在包中定义类的唯一方法就是在这个包的__init__.py
文件里定义它们。因为我之前是用Java的,所以我希望能为我的类定义单独的文件。这种做法推荐吗?
我希望我的目录结构大致是这样的:
recursor/
__init__.py
RecursionException.py
RecursionResult.py
Recursor.py
这样我就可以像这样引用我的类:recursor.Recursor
、recursor.RecursionException
和recursor.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 是不一样的。与其为每个类都创建一个新的模块,不如把紧密相关的类放在一个模块里。这样你的代码会更容易理解,而且调用的时候也不需要写一大堆导入语句。