2011-02-17 4 views
3

Qu'est-ce que __get__ peut réaliser qui ne peut pas être fait avec une méthode getter sur l'objet propriétaire?A quoi sert la méthode python __get__?

Je peux penser à une meilleure séparation des préoccupations mais je suppose qu'il y en a plus.

Répondre

5

Il est utilisé pour les descripteurs. Ils sont un peu comme les getters/setters et les propriétés de Python, mais mieux. C'est ainsi que Python implémente le principe d'accès uniforme. Python Descriptors

+1

"Mais mieux"? Les propriétés utilisent le protocole __get__, donc ce n'est pas "un peu comme", elles * sont *. ;) –

+0

Non, je veux dire les propriétés au sens Java, c'est mieux à cause de UAP, donc plus de getProp(), setProp (blah) non-sens. –

1

Les méthodes Getter sont moche. Il est beaucoup plus clair à faire:

obj.foobar 

que

obj.get_foobar() 

En second lieu, il sert à mettre en œuvre staticmethod, classmethod et méthodes régulières. Tous ont des comportements légèrement différents et la méthode __get__ est utilisée pour les implémenter.

+0

Mais vous pouvez user propriété (...) ou @property pour les getters jolie. Je vais jeter un coup d'oeil aux autres utilisations. Merci. – reshefm

+0

@reshefm, la propriété est implémentée en utilisant __get__. C'est juste un raccourci pour faire la même chose. __get__ vous permet essentiellement de créer des objets qui agissent comme des propriétés, mais qui font quelque chose différemment. –

+0

Vous l'avez maintenant après avoir lu le lien de Y.H Wong. Merci encore! – reshefm