【问题标题】:How can I split a module into multiple files, without breaking a backwards compatibly?如何在不破坏向后兼容的情况下将模块拆分为多个文件?
【发布时间】:2014-06-07 18:55:37
【问题描述】:

假设我有一个如下所示的model.py 文件:

class Foo():
  ..

class Bar():
  ..

我正在从其他模块导入model,然后使用model.Foo() 每当我想参考它们时。

import model

foo = model.Foo()

随着这个文件越来越大,我想拆分每个班级 到多个文件中,但如果不破坏向后兼容性 可能。

我的想法是这样打破它:

model
├── __init__.py
├── foo.py
└── bar.py

但这样做我将不得不将它们称为model.foo.Foo()

所以我的问题是:是否可以以某种方式将其拆分为多个文件,但仍将它们称为model.Foo()

我还应该能够在Bar 中扩展或使用Foo

【问题讨论】:

    标签: python module


    【解决方案1】:

    当然可以,只需导入__init__.py中的类:

    # in __init__.py
    from model.foo import Foo
    from model.bar import Bar
    

    然后当你想使用它们时,你可以:

    >>> import model
    >>> model.Bar()
    <model.bar.Bar object at 0x31306d0>
    

    >>> from model import Foo
    >>> Foo()
    <model.foo.Foo object at 0x31307d0>
    

    【讨论】:

    • 实际上在一个全新的项目中它工作,但我怎么能在bar.py 中导入Foo
    • 就在import modelbar.py。或from model import Foo。以同样的方式工作。
    • 问题出在原始项目的其他地方,但一个邪恶的尝试/捕获阻止我连接点!还有一个问题,是否有可能以某种方式导入所有这些而无需明确地一一进行?
    • 我现在无法真正测试它,但from model import * 可能会成功。
    • @Lipis 是的,from model import *import model 都可以使用。导入模型可以让你说model.Foo()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 2016-10-29
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2011-08-27
    相关资源
    最近更新 更多