python模块的命名空间和__dict__属性
一、模块命名空间
1、什么是命名空间
首先介绍什么是命名空间,一种最佳的理解方式就是把命名空间看作名称的封装,也就是你定义想要让系统其余部分能够看见的名称位置。简而言之,命名空间就是一个对象所有属性名称的字典。
2、哪些变量能够存在于命名空间
简单来说,在模块文件顶层(也就是不在函数或者类的主体内)赋值的所有名称都会成为该模块的属性,也就存在于该模块的命名空间之内。 换句话来说,命名空间__dict__中的所有键key,我们都可以通过属性访问符'.' 来进行访问。
- 模块语句会在首次导入时执行
- 顶层赋值语句会创建模块的属性
- 模块的命名空间可以通过属性__dict__来查看
- 模块是一个独立的作用域
二、命名空间字典:__dict__
事实上,在内部,模块命名空间被存储为字典对象,它们只是普通的字典,拥有所有一般的字典方法。我们可以通过__dict__属性来获取模块命名空间的字典。
举个例子,现在我们有一个simple.py模块 simple.py
print('Hello')
spam = 1
导入该模块
import simple
导入模块时候会对模块进行加载和执行,所以这里会打印Hello
Hello
我们查看simple模块的__dict__属性
simple.__dict__
对于simple命名空间内的变量,我们都可以通过属性访问符'.' 进行访问。并且如果我们更改__dict__对模块的属性进行增减。
defaults = {
'a': 1,
'b': 2
}
simple.__dict__.update(defaults)
simple.__dict__
simple.a
1
|