Python propose un modèle objet assez simple par rapport aux autres langages. Il se situe à mi-chemin entre le dispositif mis en place pour Perl et celui plus sophistiqué de Java.
En Python, il n'y a pas à proprement parlé d'attribut privé. Il existe la notion d'attribut protégé qui s'obtient en préfixant le nom de l'attribut par deux '_' , exemple: __monAttribut .
Un attribut protégé est toutefois accessible par l'ajout du nom de la classe , exemple : _maclasse__monAttribut . Cette protection est donc toute relative.
Comment Python recherche une méthode ou un attribut.
Pour connaitre le cheminement, il est possible de redéfinir ses propres méthodes.
Celle à implémenter dans une classe sont:
def __getattribute__(self, attr): print(f"attribut demandé : {attr}") return super().__getattribute__(attr) def __getattr__(self, attr): print(f"attribut demandé non trouve : {attr}") return super().__getattribute__(attr) def __setattr__(self, attr,val): print(f"attribut a changer : {attr} avec {val}") super().__setattr__(attr,val)
Recherche d'un attribut ou d'une méthode.
- En cas d'échec de la recherche au sein de l'objet, une recherche est relancée au niveau de la classe elle même pour retourner une attribut de classe par exemple.
- En cas d'échec la methode __getattr__ est sollicitée en dernier recours.
Mise à jour d'un attribut.
Ecarts de comportement.
- Ne pas manipuler une variable de classe par le biais des objets instanciés.
- Ne pas manipuler directement les attributs protégés
Aucun commentaire:
Enregistrer un commentaire