如何在Python中定义子模块?

4

Python有一个名为"os"的模块。它还有另一个名为"os.path"的模块,归类在"os"下面。

即使仅导入"os"模块,我也可以使用"os.path"方法。

import os

print(os.path.join("sdfs","x"))

我想知道如何定义一个像这样的子模块?

1
在你的模块中,对于每个你想要转换为子模块的目录,都要定义一个 __init__.py 文件。 - cs95
os.py 是一个文件模块,但 path 只需要是该文件中的一个变量。 - OneCricketeer
2个回答

5

这是 os 模块的 __init__.py '魔法' - 它将其子模块path导入到其命名空间中,实质上为您提供了一种访问后者的方式,即使您仅导入os也可以。

os
|- path
   |- __init.__.py    # 2
|- __init__.py        # 1

第一个__init__.py(#1) 本质上包含了 import .path,因此每当你导入 os 时,它会将 path 导入其命名空间中,所以你可以将其作为 os.path 访问。
(注意:这并非适用于 os 模块的情况,但本质上是这样实现的)

2

请使用以下结构:

/ Package
├── __init__.py
├── file.py
│
├─┐ subpackage
│ ├── __init__.py
│ └── file.py
│
└─┐ subpackage2
  ├── __init__.py
  └── file.py

注意每个子包都有自己的__init__.py文件。这会使得Package.subpackage的行为类似于os.path,在导入方面(假设您没有在Package的主__init__文件下导入.subpackage)。

我无法理解。那么我的包结构应该是什么?"/Package" 是 "os" 的名称吗? - amone
@amone package 是你的模块名称(或者在这种类型的模块中,更好地称为 package)。 - Uriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接