Python __all__ 用法

在读 Django 源码时发现了这个 __all__:
https://github.com/django/django/blob/master/django/http/__init__.py

__all__ 是一个 list,里面装着字符串形式的变量名。
举个例子来看它的用法:
在同一目录下的两个 .py 文件,一个是 foo.py,一个是 bar.py。

# foo.py
a = 5
b = 3

我们运行 bar.py

# bar.py
from foo import *
print(a)
print(b)
输出:
5
3

现在改写一下 foo.py

# foo.py
a = 5
b = 3
__all__ = ['a']

再次运行 bar.py 则会报错,因为 b 无法被导出了。
NameError: name 'b' is not defined
但是这不是绝对的,因为 __all__ 只能限制 from module import *这种形式,因此可以加一行:

from foo import b

这样就不会报错了。

在 python 的世界里,没有真正的私有对象。
all 仅对 from ... import * 起作用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,695评论 19 139
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,376评论 4 16
  • 切换到创建项目的目录 cd C:\Users\admin\Desktop\DjangoProject创建名为pr...
    在努力中阅读 3,546评论 2 3
  • c++ post请求
    NoFacePeace阅读 379评论 0 0
  • 最近《人民的名义》那是火得不要不要的。 话说看到后来,我一向看好的育良书记和吴老师闹掰了呢!竟然还,还,还离婚了呢...
    萌马记阅读 1,381评论 1 2

友情链接更多精彩内容