请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

__all__作用范围

老师你好,想请教以下__all__的作用范围。具体问题如下:

folder: Chapter8

    folder: t

        file: __init__.py: 

            code: __all__ = ['c1']

        file: c1.py:

            code:

            __all__ = ['a', 'c']


            a = "this is a in module t.c1"

            b = "this is b in module t.c1"

            c = "this is c in module t.c1"

        file: c2.py:

            code:

            f = "this is f in module t.c2"

    file: c3.py:

        code:

        from t import *


        print(c1.a)

        print(c1.b)


final result:

"this is a in module t.c1"

"this is b in module t.c1"


问题:

使用 from t import * 时,c1.py中的__all__定义的['a', 'c']并没有起作用

如果换成from t.c1 import *时,c1.py中的__all__定义的['a', 'c']起作用

是不是__all__起作用的范围有什么规则?

https://img1.sycdn.imooc.com//szimg/5b0fb4b700013d8213010868.jpg

正在回答 回答被采纳积分+3

1回答

向也 2018-06-21 19:49:42

我理解 from t import * 是直接去统一导入包下面的所有模块和变量,不存在逐级导入,也就是模块再去执行导变量的过程;所以c1的__all__不生效,c3自然能访问c1的变量,不信打印c2的f试试呢

而form t.c1 imoort * 则指明从c1导变量,all当然生效了

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号