Merci à ASkanswer (grand merci mon pote) j'ai réussi à résoudre mon problème, mais je devais remplacer
att = self.__dict__[attr]
avec
att = type(self).__dict__[attr].__get__(self, type(self))
et ici travaille par exemple avec décorateur de classe:
def getattribute(self, name):
if name.startswith('__') and name.endswith('__'):
return object.__getattribute__(self, name)
s = '*** method "%s" of instance "%s" of class "%s" called with'\
' following'
print s % (name, id(self), self.__class__.__name__),
def intercept(call, name):
def func(*args, **kwargs):
print 'args: {}, kwargs: {} ***'.format(args, kwargs)
c = call(*args, **kwargs)
print '*** "%s" finished ***' % name
return c
return func
a = type(self).__dict__[name].__get__(self, type(self))
if callable(a):
return intercept(a, name)
return object.__getattribute__(self, name)
def inject(cls):
setattr(cls, '__getattribute__', getattribute)
return cls
@inject
class My_Str(object):
def qwer(self, word='qwer'):
print 'qwer done something here...'
je reçois l'argument hors de portée lorsque je tente d'utiliser les arguments (par exemple: arg [1] est le premier paramètre, arg [2] est le deuxième, etc ... –
jamais l'esprit. Cela fonctionne parfaitement. Je dois avoir tapé quelque chose de mal. Merci beaucoup. –