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:
	
| 12
 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:
	
| 12
 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.