31,python~ _init_.py 文件

转自【python】__init__.py文件到底是什么? - 知乎

PyCharm 是由 JetBrains 打造的一款 Python IDE。

PyCharm用于一般IDE具备的功能,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制……

创建python package会生成一个 _init_.py 文件

对于一个python项目,里面的每一个文件夹都可以认为是一个package,而每一个.py文件被认为是一个module。如果你用的IDE是PyCharm,那么当你新建一个Python Package的时候,PyCharm都会自动为你新建一个__init__.py文件。这个__init__.py文件可以看作这个package的初始化文件

当我们从一个package里面调用东西的时候,该__init__.py文件内的代码会被首先执行。

__init__.py文件有什么用?

1 简化import语法

"""
.
├── demo.py
├── package
|   ├── __init__.py
|   ├── module.py
"""

# module.py

def a_function():
    print("Test function is called!")

如果我现在想从demo.py中调用它,没有__init__.py文件的话,只能这么写(方法一)

# demo.py

from package.module import a_function

a_function()

 批量导入和规范化导入以及__all__

如果你在module.py中定义了很多函数,你想在demo.py中调用,怎么办呢?如module.py中有两个函数

# module.py

def a_function_1():
    print("Test function 1 is called!")

def a_function_2():
    print("Test function 2 is called!")

先在__init__.py批量导入

# __init__.py

from package.module import *

再在demo.py中批量导入(少调用一层py文件)

# demo.py

from package import *

a_function_1()

这样就可以实现package中诸多函数的批量导入了。注意批量导入遵从覆盖原则,即如果有多个类和方法名字相同,那么后导入的会覆盖先导入的。

但是如果你只允许a_function_1被外界调用呢,就可以把__init__.py改成

# __init__.py

from package.module import a_function_1

这样在demo.py文件中,调用a_function_2就会报错。

# demo.py

from package import *

a_function_2()    # 这里就会报错

更优雅一点可以调用__all__属性,在__init__.py中定义可以被外界调用的类和方法,如

# __init__.py

__all__ = ['a_function_1']     # 这样,在demo.py只能调用a_function_1方法

from package.module import *

这里举的例子都是函数/方法,对于类来说,是一样的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值