代码之家  ›  专栏  ›  技术社区  ›  Indominus

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

  •  0
  • Indominus  · 技术社区  · 7 年前

    我有几个相关的课程放在这样一个包里:

    \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# 它允许您将同一类的实现分散到不同的文件中?

    0 回复  |  直到 7 年前
        1
  •  0
  •   Andrew F    7 年前

    在你 __init__.py 您可以执行导入以缩短在其他地方使用它们的方式。所以一条线 π介子 可以是

    from cool_name import CoolName
    

    以后你可以

    from cool import CoolName
    

    你可能还想看看 __all__ 作为解决这个问题的另一种方法。你可以在 cool.__init__.py 模块,只要包含 阿尔法 可以显式指定要导出的对象。

    关于部分类,我几乎可以肯定python通过常规类定义不支持这种功能。您可以在运行时将不同的函数注入到一个类中,从而将其组合在一起,但这肯定会很混乱。 This 答案是更深入地审视这条道路。