繁体   English   中英

在模块和/或包中组织 Python 类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM