j'ai une fonction décorée (version simplifiée):ajouter une fonction décorez à une classe
class Memoize:
def __init__(self, function):
self.function = function
self.memoized = {}
def __call__(self, *args, **kwds):
hash = args
try:
return self.memoized[hash]
except KeyError:
self.memoized[hash] = self.function(*args)
return self.memoized[hash]
@Memoize
def _DrawPlot(self, options):
do something...
maintenant je veux ajouter cette méthode à une classe pré-esisting.
ROOT.TChain.DrawPlot = _DrawPlot
quand je l'appelle cette méthode:
chain = TChain()
chain.DrawPlot(opts)
J'obtenu:
self.memoized[hash] = self.function(*args)
TypeError: _DrawPlot() takes exactly 2 arguments (1 given)
pourquoi ne pas propager l'auto?
Toujours hériter de 'object' au lieu de rien afin que vous utilisiez des classes de style nouveau. –
Ne nommez pas les méthodes avec les premières lettres majuscules si vous avez le choix en la matière. Utilisez des noms comme '_draw_plot' (recommandé par PEP 8) ou' _drawPlot'. –
Ma réponse était trompeuse, donc il a fallu la côtelette. Merci pour les commentaires Mike! –