Classes que implementam o método __len__, quando testadas com if, este método é invocado. Portanto, para uma lista vazia, o teste falha.
x = [];
if x:
    print "OK" # Nao imprime nada
Para mudar este comportamento, basta reimplementar o método __nonzero__.
class MyList(list):
    def __nonzero__(self):
        return True
x = MyList();
if x:
    print "OK" # Imprime OK
											 
								




tem algum exemplo interessante em que bool() deveria retornar True para uma lista-like vazia?
Uma vez estava trabalhando em um toolkit em python para um projeto interno aqui. Entre os widgets tínhamos o tipo Container, um widget que continha outros widgets (Window, Grid, List, etc). Sobrecarreguei o método __len__ para facilitar a consulta de quantos widgets estavam contidos em dado Container.
Acontece que alguém poderia fazer algo assim:
list = create_options_list()
if list:
list.show()
Este teste falhava para uma lista vazia por exemplo. No caso, o teste é para ver se a lista foi criada corretamente. Uma lista, mesmo que vazia, seria válida. A correção é fácil:
if list is not None:
list.show()
Mas achei que neste caso poderia induzir os usuários do toolkit ao erro. Então pesquisei para saber como resolver isto e daí saiu a dica. :)