[英]Organizing Python classes in modules and/or packages
我喜欢每个文件有一个公共类的 Java 约定,即使有时有充分的理由将多个公共类放入单个文件中。 就我而言,我有相同接口的替代实现。 但是,如果我将它们放入单独的文件中,我会在导入语句(或误导性的模块名称)中有多余的名称:
import someConverter.SomeConverter
而someConverter
将是文件(模块)的名称和SomeConverter
类名。 这对我来说看起来很不优雅。 将所有替代类放在一个文件中会导致更有意义的导入语句:
import converters.SomeConverter
但是我担心如果我将所有相关的类放在一个模块文件中,文件会变得非常大。 这里的 Python 最佳实践是什么? 每个文件一个班级不寻常吗?
很多都是个人喜好。 使用 python 模块,您可以选择将每个类保存在一个单独的文件中,并且仍然允许import converters.SomeConverter
(或from converters import SomeConverter
)
您的文件结构可能如下所示:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
然后在你的__init__.py
文件中:
from baseconverter import BaseConverter
from otherconverter import OtherConverter
Zach 的解决方案在 Python 3 上中断。这是一个固定的解决方案。
很多都是个人喜好。 使用 python 模块,您可以选择将每个类保存在一个单独的文件中,并且仍然允许import converters.SomeConverter
(或from converters import SomeConverter
)
您的文件结构可能如下所示:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
然后在你的__init__.py
文件中:
from converters.baseconverter import BaseConverter
from converters.otherconverter import OtherConverter
上面的解决方案是好的,但是在__init__.py
导入模块的问题是这会导致所有模块加载两次(效率低下) 。 尝试在otherconverter.py
的末尾添加一条打印语句并运行otherconverter.py
。 (你会看到打印语句被执行了两次)
我更喜欢以下内容。 使用另一个名为“_converter”的包并在那里定义所有内容。 然后你的“converters.py”成为访问所有公共成员的接口
* _converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
* converters.py
converters.py
在哪里
from _converters.someconverter import SomeConverter
from _converters.otherconverter import OtherConverter
...
...
...
converters = [SomeConverter, OtherConverter, ...]
而且正如前面提到的解决方案,这是个人选择。 一些实践涉及在包中定义一个模块“interace.py”并在此处导入所有公共成员。 如果你有很多模块要加载,你应该选择效率而不是美观。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.