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月于苏州

你可能感兴趣的:(Python进阶话题杂谈(二)布尔协议)