¿Por qué el método __get__
en un python descriptor acepta la clase de propietario como su tercer argumento? ¿Puedes dar un ejemplo de su uso?¿Por qué un descriptor python __get__ método acepta la clase owner como un arg?
El primer argumento (self
) es evidente, la segunda (instances
) tiene sentido en el contexto del patrón descriptor normalmente se muestra (por ejemplo a seguir), pero nunca he visto la tercera (owner
) utilizado. ¿Alguien puede explicar cuál es el caso de uso para él?
Sólo a modo de referencia y respuestas que facilitan esto es el uso típico de descriptores que he visto:
class Container(object):
class ExampleDescriptor(object):
def __get__(self, instance, owner):
return instance._name
def __set__(self, instance, value):
instance._name = value
managed_attr = ExampleDescriptor()
Dado que instance.__class__
está disponible todo lo que puedo pensar es que la aprobación explícita de la clase tiene algo que hacer con acceder directamente al descriptor de la clase en lugar de a instancias (ex Container.managed_attr
). Aun así, no estoy seguro de lo que se podría hacer en __get__
en esta situación.
"registrando o levantando una excepción más útil" Gracias. – Finn
¿Por qué no implementar también atributos de nivel de clase administrados? Por ejemplo, cuando un atributo de datos de clase existente se beneficiaría de ser visto en unidades diferentes. Diga, Room.default_temperature_C, Room.default_temperature_F? ¿No es el caso de uso más obvio, o me falta algo? – max
@max: le falta algo;) - pregunte como una pregunta regular si quiere una respuesta detallada. –