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



我有几个相关的类坐在这样的包中:

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

我像这样使用这些类:

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

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

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): ...

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

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

有没有办法可以将源代码放在单独的文件中,同时仍然能够像我现在一样用简洁的语法引用它们?

更好的是,python中是否有任何内容(例如C#中的分部类)允许您在不同的文件中传播同一类的实现?

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

from cool_name import CoolName

以后你可以做

from cool import CoolName

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

关于分部类,我几乎可以肯定Python不支持通过常规类定义来实现这种功能。您可以通过在运行时将不同的函数注入类来破解它,但这肯定会很混乱。这个答案更深入地审视了这条道路。

最新更新