una resueltos programacion poo otra orientada objetos metodo llamar instancia herencia funciona ejercicios definir como clases clase atributos python python-3.x class attributes metaclass

resueltos - poo python 3



¿Por qué son diferentes los procedimientos de búsqueda para obtener un atributo de una clase y de una instancia? (1)

Python in a Nutshell describe los procedimientos de búsqueda al obtener un atributo. El libro distingue dos casos

  • el procedimiento de búsqueda cuando se obtiene un atributo de una clase, por ejemplo, cls.name

    Obtener un atributo de una clase

    Cuando utiliza la sintaxis C.name para hacer referencia a un atributo en un objeto de clase C , la búsqueda continúa en dos pasos:

    1. Cuando el name es una clave en C.__dict__ , C.name obtiene el valor v de C.__dict__[''name''] . Entonces, cuando v es un descriptor (es decir, el type(v) suministra un método llamado __get__ ), el valor de C.name es el resultado del type(v).__get__(v, None, C) de llamada type(v).__get__(v, None, C) . Cuando v no es un descriptor, el valor de C.name is v .

    2. Cuando el name no es una clave en C.__dict__ , C.name delega la búsqueda en las clases base de C , lo que significa que se repite en las clases ancestrales de C e intenta la búsqueda de nombres en cada orden (en resolución de método, como se describe en " Orden de resolución de método "en la página 113).

  • el procedimiento de búsqueda cuando se obtiene un atributo de una instancia, por ejemplo, obj.name

Dado que en Python 3, cada objeto de clase es realmente una instancia de su metaclase (por ejemplo, clase de type ), según el libro, ¿por qué el procedimiento de búsqueda para obtener un atributo de una clase y el procedimiento de búsqueda para obtener un atributo de una instancia diferente ?


No son diferentes, el libro simplemente está pasando por alto el concepto de metaclases aquí, ya que la mayoría de las clases son instancias del type base, que no tiene comportamientos especiales. Si tiene una metaclass que no sea el type , las reglas de búsqueda de instancia completa se aplican al buscar atributos en una clase (es solo que la clase de la clase es la metaclase).

Probablemente estaban tratando de evitar la complejidad de las metaclases desde el principio, eso es todo.