¿Por qué el booltin de Python solo incluye el método __bool__ de nivel de clase [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Asignar (en lugar de definir) un método mágico __getitem__ rompe la indexación [duplicado] 2 respuestas

losdocumentación establece claramente que

Cuando este método(__bool__) no está definido,__len__() se llama, si está definido, y el objeto se considera verdadero si su resultado es distinto de cero. Si unclase no define ninguno__len__() ni__bool__(), todas sus instancias se consideran verdaderas.

Negrita es mi inserción, la cursiva es mía pero el texto está realmente allí. El hecho de que la clase debe contener el método es fácilmente probado por

class A:
    pass

a = A()
a.__bool__ = (lamda self: False).__get__(a, type(a))

print(bool(A()), bool(a))

El resultado esTrue True, como lo reclama la documentación. Primordial__len__ produce el mismo resultado:

b = A()
b.__len__ = (lambda self: 0).__get__(b, type(b))

print(bool(A()), bool(b))

Esto funciona exactamente como dice la documentación. Sin embargo, creo que el razonamiento detrás de esto es un poco contra-intuitivo. Entiendo que elbool builtin no mira los métodos de la instancia, pero no entiendo por qué. ¿Alguien con conocimiento del funcionamiento interno sabe por qué solo el nivel de clase__bool__ y__len__ Qué métodos afectan la veracidad, mientras que los métodos de nivel de instancia se ignoran?

Respuestas a la pregunta(1)

Su respuesta a la pregunta