Python进阶话题杂谈(二)布尔协议

1  __bool__与__nonzero__

在各类编程语言中,对于bool值的判定大致分为两类策略,一是设立布尔值常量TRUE和FALSE,任何其他数据结构均无布尔值意义,另一种是,所有的数据结构都可通过一定规则计算出一个布尔值,Python中采用的策略是后者。对于Python的内建类型:整数0,浮点数0,以及任何空数据结构,包括空字符串、空数组、空哈希表等,其布尔值均为FALSE,而非零数字与非空数据结构,其布尔值均为TRUE。

对于自定义的类,其实例对象的布尔值通过布尔协议进行判定。布尔协议的核心方法为__bool__(Python3)与__nonzero__(Python2),这两个方法应返回一个布尔值。当对一个对象调用bool函数时,就会调用这个对象的__bool__方法,得到一个布尔值。

2  __len__

__len__方法是len函数所对应的方法。当对某个对象调用len函数时,就会调用这个对象的__len__方法,从而返回当前对象的长度。同时,__len__方法也是获取布尔值的备用方法。当__bool__方法未定义时,bool函数就会取__len__方法的返回值(一般为一个整数),根据此返回值判定布尔值。

综上所述,__bool__方法是布尔值判定的核心方法,只要此方法被定义,则布尔值就一定通过此方法进行获取。而__len__方法是布尔值判定的备用方法,仅当__bool__方法未被定义时,才会使用此方法的返回值进行布尔值的判定。更多的情况下,如果__bool__方法与__len__方法均没有定义,则布尔值强制为TRUE。


2018年6月于苏州

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容