【问题标题】:File/module structure in PythonPython中的文件/模块结构
【发布时间】:2012-03-08 22:25:18
【问题描述】:

所以我刚刚开始使用 Python,目前正在通过http://diveintopython3.ep.io/ 工作。代码示例很好,但绝大多数都是小四行 sn-ps,我想多看一点大图。

据我了解——如果我错了,请纠正我——每个“.py”文件都成为一个“模块”,一个目录中的一组模块成为一个“包”(至少,它确实如果我在该目录中创建一个__init__.py 文件)。如果我没有__init__.py 文件怎么办?

那么每个“模块”文件是什么样的?我通常只在文件中定义一个类吗?除了类定义和一些import 命令之外,该文件中还有其他内容吗?

【问题讨论】:

    标签: python module packages


    【解决方案1】:

    如果我没有 __init__.py文件?

    这只是一个文件夹。

    我一般只定义一个类吗 在文件中?

    这取决于。不一定。

    该文件中还有其他内容吗 除了类定义,也许 几个导入命令?

    你可以放任何你想要的东西。至少任何有效的python。

    【讨论】:

    • 为什么?你认为拥有一个只有一个类的模块是不可思议的吗?
    • 我有很多模块根本没有定义类。我还有其他人定义了一些相关的类(并且仍然不超过 100、150 行)。 Python 不是 Java - 类不是强制性的,所以当有更好的选择时不要使用它们(当然这同样适用于其他一切)。
    • @Falmarri:不,只是因为从 OP 的回答看来,他是在 python 上进行 java 设计,所以我想你可以告诉,这是 没有必要在python中说这取决于在我看来,如果你告诉他你可以像Java一样在python中编程很好,只是句子语法没什么大不了的,没关系:)跨度>
    • 所以,我可以制作一个模块bob,它只是一系列函数。要在其他地方使用bob,我import bob,然后以bob.func_one()bob.func_two() 等身份访问这些功能?或者我不需要在函数名称前加上bob.
    • 如果你做一个import bob,那么你需要像你提到的那样调用每个函数:bob.func_one()等。如果你做一个:from bob import func_one,这个导入only func_one from bob 你直接调用它:func_one() 没有bob 前缀。
    【解决方案2】:

    这不是一个真正的答案,但总是值得查看标准库,看看他们如何在 sqlite3 等包中使用 __init__.pySimpleHTTPServer 等模块中使用 SimpleHTTPServer

    【讨论】:

      【解决方案3】:

      Falmarri 回答得很好,只是补充一下:

      __init__.py 可以是空文件(通常是),但它也可以执行包的初始化代码或设置__all__ 变量。

      【讨论】:

      • 或者你可以把你的整个代码放在__init__。或者放上你要公开的代码。
      • 我也看过(我喜欢它,作为图书馆用户)from pkg.subpkg import some, commonly, used, stuff 所以import pkg 已经为您提供了您需要的大部分东西。
      猜你喜欢
      • 2014-01-08
      • 2020-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      相关资源
      最近更新 更多