摘要: 十五、上下文管理器和 else 块 with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文。 能避免错误并减少样板代码,因此API更安全,而且更易于使用。 else 子句与 with 语句完全没有关系。 if 语句之外的 else 块 先做这个,再做那个 for/else 阅读全文
posted @ 2021-11-04 15:07 pythoner_wl 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 十四、可迭代的对象、迭代器和生成器 In [28]: import re 在 Iterable 类中定义。 In [29]: import reprlib In [30]: RE_WORD = re.compile('\w+') In [31]: class Sentence: ...: def _ 阅读全文
posted @ 2021-11-04 15:05 pythoner_wl 阅读(100) 评论(0) 推荐(0) 编辑
摘要: 十三、正确重载运算符 运算符重载的作用:让用户定义的对象使用中缀运算符或一元运算符。 Python 施加了一些限制,做好了灵活性、可用性和安全性方面的平衡: 1 不能重载内置类型的运算符 2 不能新建运算符,只能重载现有的 3 某些运算符不能重载—— is , and , or , not (位运算 阅读全文
posted @ 2021-11-04 15:03 pythoner_wl 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 十一、接口:从协议到抽象基类 抽象类表示接口。 ——Bjarne Stroustrup C++ 之父 从鸭子类型的代表特征动态协议,到使接口更明确、能验证实现是否符合规定的抽象基类(Abstract Base Class, ABC) 我们把协议定义为非正式的接口,是让 python 这种动态类型语言 阅读全文
posted @ 2021-11-04 15:02 pythoner_wl 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 十二、继承的优缺点 子类化内置类型很麻烦 内置类型(使用 C 语言编写)不会调用用户定义的类覆盖的特殊方法。 至于内置类型的子类覆盖的方法会不会隐式调用,CPython 没有制定官方规则。基本上,内置类型的方法不会调用子类覆盖的方法。例如,dict 的子类覆盖的 __getitem__() 方法不会 阅读全文
posted @ 2021-11-04 15:02 pythoner_wl 阅读(111) 评论(0) 推荐(0) 编辑