我有几个相关的类坐在这样的包中:
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不支持通过常规类定义来实现这种功能。您可以通过在运行时将不同的函数注入类来破解它,但这肯定会很混乱。这个答案更深入地审视了这条道路。