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é.

 


Comments rss
Posted by Fabien on Friday 23 December 2011 à 10:43
Il faut que la classe Beatle implémente le DP S.......n ;)

Name: Email: URL: Comment: If you enter anything in this field your comment will be treated as spam: Captcha: captcha