摘要: 迭代器模式 迭代器模式与yield关键字 扫描内存中放不下的数据集时,需要惰性获取数据,即按需一次获取一个数据项,这就是迭代器模式。 python为了实现迭代器模式,加入了yield关键字,用于构建生成器。 所有生成器都是迭代器,因此生成器完全实现了迭代器接口。 一般认为,迭代器用于从一个集合中取出 阅读全文
posted @ 2022-03-14 22:01 肖肖凯 阅读(245) 评论(0) 推荐(0)
摘要: 不要子类化内置类型 python2.2之前,内置类型不能子类化 python2.2之后可以子类化,但是内置类型的方法无法调用其子类覆盖的方法 如下例子,内置类型dict的__init__和__update__方法会忽略子类覆盖的__setitem__方法 因此,不要直接子类化内置类型,内置类型的方法 阅读全文
posted @ 2022-03-14 19:33 肖肖凯 阅读(82) 评论(0) 推荐(0)
摘要: 接口与协议定义 接口 类实现或继承的公开属性,包括特殊方法,都是类的接口。即可以为外界所知的都是接口。受保护的属性和私有属性不是接口,虽然在python中并没有真正的受保护属性和私有属性。接口有两类,一类是正式的,即抽象基类。一类是非正式的,即协议。 协议 协议也是接口,但不是正式的,协议只由文档了 阅读全文
posted @ 2022-03-14 16:29 肖肖凯 阅读(379) 评论(0) 推荐(0)
摘要: __hash__ 要让对象可散列,就要实现其__hash__方法,常用方案是将对象中各个分量的散列值异或,构成整个向量对象的散列值。 其中reduce是归约函数,其有三个参数,第一个是有两个操作数的函数,第二个是可迭代对象,第三个是可迭代对象为空时返回的默认值。 operator模块以函数的形式提供 阅读全文
posted @ 2022-03-14 15:45 肖肖凯 阅读(82) 评论(0) 推荐(0)
摘要: python中属性查找流程 对于my_obj.x表达式,首先检查my_obj实例中有没有名为x的实例属性 如果上一步没找到,检查对应的类中有没有名为x的类属性,因为类属性可以作为实例属性的默认值 如果上一步没找到,沿着继承树继续查找...... 如果仍找不到,则会调用__getattr__方法。 _ 阅读全文
posted @ 2022-03-14 11:48 肖肖凯 阅读(82) 评论(0) 推荐(0)
摘要: python协议 在python中创建功能完善的序列类型无需使用继承,只需实现符合序列协议的方法。 在面向对象编程中,协议是非正式的接口。非正式是指跟抽象基类不一样,协议只在文档中定义,不在代码中定义。 python中,只要实现了__len__和__getitem__两个特殊方法,则可认为该类是序列 阅读全文
posted @ 2022-03-14 10:40 肖肖凯 阅读(22) 评论(0) 推荐(0)