Perché il metodo __get__
in un python descriptor accetta la classe del proprietario come terzo argomento? Puoi dare un esempio del suo utilizzo?Perché un metodo python descrittore __get__ accetta la classe del proprietario come arg?
Il primo argomento (self
) è evidente, il secondo (instances
) ha un senso nel contesto del modello descrittore tipicamente mostrato (ex a seguire), ma non ho mai visto il terzo (owner
) utilizzato. Qualcuno può spiegare a cosa serve il caso d'uso?
Solo a titolo di riferimento e risposte che facilitano questo è l'uso tipico di descrittori che ho 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()
Dato che instance.__class__
è disponibile tutto quello che posso pensare è che passa in modo esplicito la classe ha qualcosa da fare con l'accesso diretto al descrittore dalla classe anziché da un'istanza (ex Container.managed_attr
). Anche così non sono chiaro su cosa si farebbe in __get__
in questa situazione.
"registrazione o aumento di un'eccezione più utile" Grazie. – Finn
Perché non implementare anche gli attributi a livello di classe gestiti? Ad esempio, quando un attributo di dati di classe esistente trarrebbe vantaggio dall'essere visto in diverse unità. Dì, Room.default_temperature_C, Room.default_temperature_F? Non è il caso d'uso più ovvio, o mi manca qualcosa? – max
@max: ti manca qualcosa;) - chiedi come una domanda regolare se vuoi una risposta dettagliata. –