Le blog: Web, Python, Django, Javascript ...

Python Quizz: pensée unique

Voici un dernier Quizz Python pour finir l'année 2011. Il est parfois utile de pouvoir créer des objets partageant les mêmes données. Dans l'example suivant, comment définir la classe Beatle pour que plusieurs de ses instances manipulent les mêmes donnée. Comment obtenir un type d'objet à "pensée unique"?

john = Beatle()
paul = Beatle()
john.sing = 'yeah yeah yeah'
print paul.sing
>>> yeah yeah yeah

Mise à jour du 2 janvier 2012

Merci à Fabien pour sa réponse en forme de quizz. Je pense que sa réponse est Singleton, c'est à dire une classe qui ne permet d'allouer qu'une seule instance.

Ma réponse est très proche mais pas tout à fait celle-ci, puisque je pensais plutôt au design pattern Borg.(cf stackoverflow pour la différence entre le singleton et le borg)

Il s'implémente de la manière suivante:

class Beatle:
    _shared = {}
    
    def __init__(self):
        self.__dict__ = self._shared

Le Borg est un Design Pattern (modèle de conception) créé par Alex Martelli, guru Python et auteur de plusieurs livres sur notre langage préféré. Il ne fait pas référence au tennisman suédois mais à des personnages de sciences-fiction de la série Star-Trek (cf Wikipedia).

La particularité des Borgs (ou devrait-on dire du Borg) est que tous les individus (en programmation on parlerait d'instances) sont interconnectés et partagent une pensée unique. On réalise cela en forçant le __dict__ (le dictionnaire des variables) de chaque instance avec un dictionnaire défini comme une variable de classe (notre dictionnaire _shared). Lorqu'on met à jour une variable d'une instance, on met en fait à jour notre dictionnaire _shared et par conséquence la variable correspondante pour chacune des instances. Une modification d'une instance d'un Borg est ainsi automatiquement reporté sur toutes les autres.

Notre _shared joue ici le rôle du Collectif des Borg, sorte de Big Brother qui dirige chacun des individus ce qui en programmation Python, contrairement à dans la vraie vie, peut se révéler parfois utile et bénéfique.

Il me reste à vous souhaiter en ce début 2012, une très bonne année. Tous mes meilleurs voeux. En espérant, que nous saurons, pendant cette année, résister à la pensée unique et lui préférer les richesses de l'échange et de la diversité.

 


Commentaires rss
Posté par Fabien le vendredi 23 décembre 2011 à 10:43
Il faut que la classe Beatle implémente le DP S.......n ;)

Nom: Email: URL: Commentaire: Si vous saisissez quelque chose dans ce champ, votre commentaire sera considéré comme étant indésirable: Captcha: captcha

Luc JEAN

09.65.20.15.70

ljean@apidev.fr

Luc JEAN

Suivez les nouveautés

Wikio RSS  RSS Blog Python Django selenium Rss commentaires
Paperblog : Les meilleurs actualités issues des blogs Follow luc_apidev on Twitter