Por que os procedimentos de pesquisa para obter um atributo de uma classe e de uma instância são diferentes?

Python em poucas palavras descreve os procedimentos de pesquisa ao obter um atributo. O livro distingue dois casos

o procedimento de pesquisa ao obter um atributo de uma classe, por exemplocls.name

Obtendo um atributo de uma classe

Quando você usa a sintaxeC.name para se referir a um atributo em um objeto de classeC, a pesquisa prossegue em duas etapas:

Quandoname é uma chaveC.__dict__, C.name busca o valorv deC.__dict__['name'] . Então quandov é um descritor (ou seja,type(v) fornece um método chamado__get__ ), o valor deC.name é o resultado de chamartype(v).__get__(v, None, C) . Quandov não é um descritor, o valor deC.name is v .

Quandoname não é a chaveC.__dict__ , C.name delega a pesquisa paraC Classes básicas, o que significa queC As classes ancestrais e tenta a pesquisa de nome em cada uma (na ordem de resolução do método, conforme abordado em "Ordem da resolução do método" na página 113).

o procedimento de pesquisa ao obter um atributo de uma instância, por exemploobj.name

Como no Python 3, todo objeto de classe é na verdade uma instância de sua metaclasse (por exemplo,type class), de acordo com o livro, por que o procedimento de pesquisa para obter um atributo de uma classe e o procedimento de pesquisa para obter um atributo de uma instância diferente?

questionAnswers(1)

yourAnswerToTheQuestion