随笔分类 - 源码阅读
摘要:事件类型标志的选择 在selectors模块中的开头直接定义了事件类型的标志数字,选用的是(1 << 0)就是1代替EVENT_READ读操作;使用(1 << 1)就是2代替EVENT_READ写操作,这样做的好处是能够交叉,使用一个数字代表两种模式,就像re模块中进行正则匹配的时候不同模式的组合一
阅读全文
摘要:10 def __init__(self, interval, function, args=None, kwargs=None): # 初始化的时候传参是延迟时间、调用的函数,函数的可变位置参数、函数的可变关键字参数
11 Thread.__init__(self) # 调用Thread类初始化配置实例
12 self.interval = interval # 在使用Thread类初始化配置实例之后再额外的增加interval属性
13 self.function = function # 同理再额外的增加function属性
14 self.args = args if args is not None else [] # 如果args不是空的话就使用args,如果是空就给一个空list
15 self.kwargs = kwargs if kwargs is not None else {} # 同理,kwargs不是空的就是kwargs,如果是空就给一个空字典
阅读全文
摘要:
本段源码可以学习的地方:
1. 考虑到效率问题,可以通过上下文的机制,在属性被访问的时候临时构建;
2. 可以重写一些魔术方法,比如 __new__ 方法,在调用 object.__new__(cls) 前后进行属性的一些小设置;
3. 在本库中使用的重写魔术方法,上下文这两种基础之上,我们可以想到函数装饰器,类装饰器,异常捕获,以及两种上下文的结构;
灵活运用这些手法,可以让我们在代码架构上更上一层,能够更加省时省力。
阅读全文

浙公网安备 33010602011771号