python中__init__.py文件

文章讲述了Python中模块导入的机制,强调了不要使用相对路径,而应使用sys.path来管理模块路径。__init__.py文件用于初始化包并控制其导入行为,可以设置默认属性和导入子模块。同时,文中提到import*的使用,虽然方便但不推荐,因为它可能导致命名冲突。
摘要由CSDN通过智能技术生成

例子

不要使用相对路径。

'''
__init__.py
'''
# from net.functions import *
VERSION = "1.0.0"

import os, sys
module_path = os.path.dirname(__file__)
module_parent_path = os.path.dirname(module_path)
sys.path.extend([module_path, module_parent_path])

from net import *

from functions import *
from net.fnetlogger import FnetLogger

上面代码中的os, sys这一段代码很重要。为什么能直接找到site-package中的包,是因为site-package的路径已经加载到sys.path中了,而os,sys那段代码的内容就是将你自己写的模块的路径加入到路径中。

import os, sys
module_path = os.path.dirname(__file__)
module_parent_path = os.path.dirname(module_path)
sys.path.extend([module_path, module_parent_path])

模块导入

在Python中,一个包是一个目录,它包含了一组相关的模块和子包。在这个包目录下,如果存在一个名为__init__.py的文件,它将被视为这个包的初始化模块。

__init__.py的作用是在导入包时执行一些初始化代码,例如设置包的默认属性或者导入子模块。同时,它还可以控制包的导入行为,定义包的接口和子包的可见性等。

下面是一个示例,假设我们有一个名为my_package的包,它包含了两个模块module1module2,并且我们想在包被导入时执行一些初始化代码:

my_package/
    __init__.py
    module1.py
    module2.py

我们可以在__init__.py中编写如下代码:

# my_package/__init__.py

print("Initializing my_package...")

# 导入模块
from my_package import module1
from my_package import module2

# 设置默认属性
VERSION = "1.0.0"

这里我们在__init__.py中输出了一条初始化信息,并导入了module1module2模块。我们还定义了一个名为VERSION的默认属性,可以在其他模块中使用。

当我们导入my_package时,__init__.py会被自动执行,输出初始化信息并导入模块:

import my_package

# 输出 "Initializing my_package..."
# 并导入 my_package.module1 和 my_package.module2

这样,我们就可以在包被导入时执行一些初始化操作,并方便地导入子模块和设置默认属性。

建议不要使用相对路径,即点符号

不要使用相对路径。

点符号

从如下代码:

from . import module1

代码中的点符号是相对路径,是相对当前模块文件夹的路径,而不是编译器等其他路径。即如下:

# . in __init__.py the same as
os.path.dirname(__file__)

关于import *

# __init__.py
from . import *	# attention:: DO NOT Use Relative Path.
from xx import *

# the same as
from os import *

在python的__init__.py文件中经常能看到import *,它的意思就是将文件中的函数,变量,类等全导入。列入你在文件中有个属性是Pi,你在使用from xx import Pi后,你便可以直接调用Pi,而不需要使用xx.Pi来调用Pi。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值