Bonjour,
Je suis en train de tester 2 solutions pour faire un Singleton : par métaclasse, et par décorateur.
Si la métaclasse fonctionne bien, j'ai un truc bizarre avec le décorateur :
car j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance @singleton class MyClass(object): def __init__(self): super(MyClass, self).__init__() self.a = 1 MyClass()
Quelqu'un peut-il m'expliquer ce qui se passe, exactement ? Je n'arrive pas à suivre le cheminement de python lors de la création/initialisation de la classe... J'imagine qu'une fois compris ça, la réponse coule se source
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Traceback (most recent call last): File "deco.py", line 17, in <module> MyClass() File "deco.py", line 5, in getinstance instances[cls] = cls() File "deco.py", line 13, in __init__ super(MyClass, self).__init__() TypeError: must be type, not function
Merci d'avance.
Partager