bonjour a tous,

je souhaiterais utiliser le DP singleton en Python, et apres quelque recherche, j'ai pu trouver une methode elegante utilisant les decorator :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
def singleton(cls):
    instances = {}
    def getInstance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return getInstance
 
@singleton
class myClass:
    pass
Cependant imaginez la situation suivante : j'ai une classe mere, et plusieurs classes filles. Je voudrais donc que mon principe du singleton s'applique a toutes les classes filles. J'ai donc tendance a mettre le @singleton sur la classe mere.
Malheureusement, l'heritage devient impossible :
TypeError: Error when calling the metaclass bases
function() argument 1 must be code, not str
Apres quelques recherches, il s'avere que c'est parce que ma classe mere devient une fonction aux yeux de Python. Et allez dire a python que je veux heriter d'une fonction...

Est ce qu'il y a une maniere elegante de contourenr le probleme, ou alors est ce que je vais devoir placer le @singleton sur chaque classe fille?

Merci