|
10鱼币
本帖最后由 wuyanzulqq 于 2020-12-9 18:53 编辑
- # 该模块用于让 Python 支持常量操作
- class Const:
- def __setattr__(self, name, value):
- if name in self.__dict__:
- raise TypeError('常量无法改变!')
-
- if not name.isupper():
- raise TypeError('常量名必须由大写字母组成!')
- [color=Red]self.__dict__[name] = value[/color]
- import sys
- sys.modules[__name__] = Const()
复制代码
这个段的意思是添加新的键/值到字典里,可这个指的是什么字典?
问题:问大家一个问题:Python 支持常量吗?相信很多鱼油的答案都是否定的,但实际上 Python 内建的命名空间是支持一小部分常量的,比如我们熟悉的 True,False,None 等,只是 Python 没有提供定义常量的直接方式而已。那么这一题的要求是创建一个 const 模块,功能是让 Python 支持常量
提示一:我们需要一个 Const 类
提示二:重写 Const 类的某一个魔法方法,指定当实例对象的属性被修改时的行为
提示三:检查该属性是否已存在
提示四:检查该属性的名字是否为大写
提示五:细心的鱼油可能发现了,怎么我们这个 const 模块导入之后就把它当对象来使用(const.NAME = "FishC")了呢?难道模块也可以是一个对象?没错啦,在 Python 中无处不对象,到处都是你的对象。使用以下方法可以将你的模块与类 A 的对象挂钩。
转自:https://www.cnblogs.com/zhaojingyu/p/9069076.html
python sys.modules模块
sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。字典sys.modules对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。
字典sys.modules具有字典所拥有的一切方法,可以通过这些方法了解当前的环境加载了哪些模块
import sys
print sys.modules.keys()
print sys.modules.values()
print sys.modules["os"]
======因此你发的代码执行过程如下:
import sys # 引入模块
sys.modules[__name__] = Const() # 把对象Const实例化,赋值给当前py程序(__name__)的一个全局字典
设置对象属性时,默认调用__setattr__方法,因此在此处加判断,就可以让里面的属性和常量一样,例如不能修改值
|
最佳答案
查看完整内容
转自:https://www.cnblogs.com/zhaojingyu/p/9069076.html
python sys.modules模块
sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules都将记录这些模块。字典sys.modules对于加载模块起到了缓冲的作用。当某个模块第一次导入,字典sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。
字典sys.modules具有字 ...
|