Python Language Descripteurs et recherches par points


Exemple

Les descripteurs sont des objets qui sont (généralement) des attributs de classes et qui ont des méthodes spéciales __get__ , __set__ ou __delete__ .

Les descripteurs de données ont l'un des __set__ ou __delete__

Ceux-ci peuvent contrôler la recherche pointillée sur une instance et sont utilisés pour implémenter des fonctions, staticmethod , classmethod et property . Une recherche pointillée (par exemple, instance foo de la classe Foo recherchant la bar attributs - c.-à-d. foo.bar ) utilise l'algorithme suivant:

  1. bar est levé dans la classe, Foo . S'il existe et qu'il s'agit d'un descripteur de données , le descripteur de données est utilisé. C'est comme cela que la property peut contrôler l'accès aux données dans une instance et que les instances ne peuvent pas remplacer cela. Si un descripteur de données n’est pas là, alors

  2. bar est recherché dans l'instance __dict__ . C'est pourquoi nous pouvons remplacer ou bloquer les méthodes appelées à partir d'une instance avec une recherche pointillée. Si la bar existe dans l'instance, elle est utilisée. Sinon, nous avons alors

  3. regardez dans la classe Foo for bar . S'il s'agit d'un descripteur , le protocole de descripteur est utilisé. Voici comment les fonctions (dans ce contexte, les méthodes non liées), classmethod et staticmethod sont implémentées. Sinon, il retourne simplement l'objet, ou il y a un AttributeError