python构建包和模块的时候要不要加__init__.py?

大家在自己写自己的python包或者模块的时候都会碰到一个问题:要不要在包的文件夹内加一个空的或者有内容的__init__.py文件?有人说要,有人说python3.3以后不需要了。到底需要不需要呢?

对于小白,可以认为:python3.3以后不需要__init__.py了。但是这个表达不够精确。准确来讲,是python3.3以后不需要空的__init__.py了。如果你一定需要只能具体某些模块被包含进这个包,而不是所有的模块都包含进这个包,那么必须加__init__.py来指定。

除此之外添加__init__.py的好处还有这些

此外的此外,添加__init__.py的好处还有:一般当你用import倒入一个包的时候,它的子包不会被自动导入,除非你在__init__.py里显式地import 一下。举例如下:

$ mkdir -p a/b
$ touch a/b/c.py

这命令行输入python打开交互式python界面:

import a
a                ⇒ <module 'a' (namespace)>
a.b              ⇒ AttributeError: module 'a' has no attribute 'b'
import a.b.c
a.b              ⇒ <module 'a.b' (namespace)>
a.b.c            ⇒ <module 'a.b.c' from '/home/cjs/a/b/c.py'>

单独import a 不会自动导入a.b.c。但是单独import a.b.c会自动导入父包a和a.b。
但是一旦你在a这个文件夹下新建__init__.py并且写入

import b

这时候

import a
a                ⇒ <module 'a' (namespace)>
a.b              ⇒  <module 'b' (namespace)>

Reference

  1. https://stackoverflow.com/questions/37139786/is-init-py-not-required-for-packages-in-python-3-3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值