メソッド __nonzero__ は何処に

新たに定義したクラスのインスタンスは、True と評価されます。ところが、メソッド __nonzero__ を再定義すると、その真偽値を再設定できます。すると、True/False と同様に、そのインスタンスを条件式に指定するだけで、見通しの良いコードを記述できるようになります。

class LinkedList:
def __nonzero__(self): return True

class NoneList(LinkedList):
def __nonzero__(self): return False

メソッド __nonzero__ を再定義すると、クラス LinkedList/NoneList は True/False と評価されます。つまり(空文字列 "" を偽と見なすのと同様に)連結リストは、要素を持つなら真と、要素を持たないなら偽と見なされます。