Métaclasses vs décorateur
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 :
Code:
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() |
car j'obtiens :
Code:
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 |
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 ;)
Merci d'avance.