Por que o bool do Python interno apenas analisa o método __bool__ em nível de classe [duplicado]

Esta pergunta já tem uma resposta aqui:

Atribuir (em vez de definir) um método mágico __getitem__ interrompe a indexação [duplicado] 2 respostas

odocumentação afirma claramente que

Quando este método(__bool__) não está definido,__len__() é chamado, se definido, e o objeto é considerado verdadeiro se o resultado for diferente de zero. Se umclasse não define nem__len__() nem__bool__(), todas as suas instâncias são consideradas verdadeiras.

Negrito é minha inserção, itálico é meu, mas o texto está realmente lá. O fato de que a classe deve conter o método é prontamente testado por

class A:
    pass

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

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

O resultado éTrue True, como afirma a documentação. Substituindo__len__ produz o mesmo resultado:

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

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

Isso funciona exatamente como a documentação afirma. No entanto, acho que o raciocínio por trás disso é um pouco contra-intuitivo. Eu entendo que obool builtin não analisa os métodos da instância, mas eu não entendo o porquê. Alguém com conhecimento do funcionamento interno sabe por que apenas o nível de classe__bool__ e__len__ métodos afetam a veracidade enquanto métodos no nível da instância são ignorados?

questionAnswers(1)

yourAnswerToTheQuestion