Archives de catégorie : DebuterEnPython

LangageProtocoles

[wiki: Protocoles]

—-

Concept général

Les « protocoles » permettent au développeur de définir des classes combinables avec certaines instructions prédéfinies du langage.

—-

Protocole de fonction

#!comment
Les differentes entités (avec état) que l'on peut fournir à un client attendant une fonction :


  • fonction avec variables globales
  • fonction avec enclosing-function scope references
  • fonction avec default mutable arguments
  • lambda-fonction avec argument par defaut
  • un objet doté d'une méthode call
  • méthode liée à un objet
  • un "générateur" (utilisant yield) ?

Utilisation

Dans tout code qui s’attend à une fonction, et qui va utiliser l’objet en lui fournissant un ou plusieurs arguments entre parenthèses.

Attendus

  • une méthode !call()!

Objets qui répondent déjà à ce protocole

  • fonction classique
  • fonction lambda
  • méthode liée à un objet

—-

Protocole d’itération

Cherche d’abord !iter!(), qui doit retourner un iterateur (objet avec méthode next()),
puis à défaut cherche !getitem!().

Attention à ce qu’ !iter!() renvoie des objets bien autonomes,
par exemple pour permettre des doubles boucles.

—-

Protocole des gestionnaires de contexte

With/as : une sorte de try/finally pour les objets qui respectent le protocole des gestionnaires de contexte, à savoir possèdent des méthodes !enter! et !exit! .

#!comment
Optionnel en 2.5 (from !future! import with_statement), standard en 2.6
with expression [as variable]:
...

LangageManipulationObjet

[wiki: Manipulation des mécanismes orientés objets]

—-

Accès aux attributs

Ces deux opérateurs permettent d’émuler, par exemple, des attributs privés :

  • getattr : appelé lorsque l’algo par défaut ne trouve rien
  • setattr : appelé dès que l’on assigne un attribut, et gare à passer par dict pour éviter le bouclage à l’infini

—-