Python之模块详细梳理(三)

控制from xxx import *导入的成员

默认情况下,所有的成员都会被导入。但可以修改__all__变量控制哪些成员可以被导入。该变量是字符串列表(或元组),内部元素是可被导入的成员名。

示例请看下图:test1模块中有name、age、height三个成员,__all__变量保存了这三个成员名。test2模块用from test1 import *导入test1所有成员,此时test2模块可以正常使用test1的三个成员。

再看下图:test1模块中__all__变量保存了三个成员名,但注释了height这个成员(注意列表的书写方式,一个元素一行,用ctrl+/注释不能被导入的成员非常方便。如果所有内容写在一行时就不能注释内部元素,只能删除),test2模块用from test1 import *导入test1的所有成员,此时只能使用name和age这两个成员,height成员不能使用。

注意:使用import 模块时,__all__不起作用。请看下图示例,test2模块用import test1导入test1的所有成员后,即使test1的height成员在__all__变量中被注释了,仍然可以正常使用。

绝对导入

在大型项目中经常会遇到模块文件很多的情况,为了方便管理一般会按功能分别建立多个文件夹,在不同文件夹下各自有多个模块,各个模块之间还存在相互引用的情况。今天先梳理一种绝对导入的方法。

有一个项目,路径是D:\Python自学笔记\模块,在该项目下有多个模块和文件夹,其中aa文件夹下有b文件夹,b文件夹内有bb.py模块。

注意红圈的内容,实际上python解释器会在加载.py文件时自动生成sys.path列表信息,sys.path[0]是当前模块的完整路径,sys.path[1]是当前模块的项目路径。

现bb模块需要调用cc模块的成员num2,可以通过from aa.c.cc import *的方法,其中b模块已知项目路径是“D:\Python自学笔记\模块”,然后加上aa文件夹名再加上.c文件夹名再加.cc模块名,即可绝对导入cc.py模块中所有的成员。

在项目路径“D:\Python自学笔记\模块”下有test_import.py模块,可以通过绝对导入的方式导入bb模块(另外bb模块中已经绝对导入cc模块,所以相当于同时导入了bb和cc),还可以通过import导入同路径下的test1模块。

绝对路径导入方法简洁易懂,要参与大型项目必须得学会这项技能。深入学python的朋友们最好自行敲代码多多练习加以熟练掌握。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值