如何在不创建许多模块的情况下将 python 类 分发到不同的源文件中?

How to distribute python classes into different source files without creating many modules?

我有一些相关的 classes 放在这样的包中:

\cool
  \__init__.py
    class CoolObj: ...
    class CoolStr(CoolObj): ...
    class CoolName(CoolStr): ...
    class CoolSound(CoolObj): ...

我使用这些 class 是这样的:

import cool
cn = cool.CoolName()
...

这个 __init__.py 文件太长了。如果我能像这样把每个 class 放在它们自己的文件中就好了:

\cool
    \__init__.py
    \cool_obj.py
        class CoolObj: ...
    \cool_str.py
        class CoolStr(CoolStr): ...
    \cool_name.py
        class CoolName(CoolStr): ...
    \cool_sound.py
        class CoolSound(CoolObj): ...

但是,这样一来,这些文件就变成了 modules 并且我必须按如下方式使用它们,这有点冗长。

from cool import cool_obj, cool_str, cool_name, cool_sound
cn = cool_name.CoolName()

有没有办法把源代码放在单独的文件中,同时又能像我现在这样用简洁的语法引用它们?

更好的是,python 中有没有像 C# 中的 partial class 这样的东西允许您传播相同的 class 在不同的文件中?

在您的 __init__.py 中,您可以进行导入以缩短在其他地方使用它们的时间。所以 __init__.py 中的一行可能是

from cool_name import CoolName

稍后你可以做

from cool import CoolName

您可能还想将 __all__ 视为解决此问题的另一种方法。您可以在 cool.__init__.py 模块中导入各种内容,只要包含 __all__,您就可以明确指定要导出的对象。

关于部分 classes,我几乎可以肯定 Python 不支持通过常规 class 定义的这种功能。您可以通过在运行时将不同的函数注入 class 来将其组合在一起,但这肯定会很混乱。 This answer 更深入地审视了这条道路。