Ваша функция «деформирования» на самом деле является декоратором, а не деформированием. Ваша функция «decorator1» является конструктором декоратора. Если вы хотите иметь доступ к self.var1 во время выполнения, вам нужно сделать декоратор не декоратором:
def decorator(function):
def wrapper(self,*args,**kwargs):
print "Doing something with self.var1==%s" % self.var1
return function(self,*args,**kwargs)
return wrapper
class Foo(object):
def __init__(self, arg1):
self.var1 = arg1
@decorator
def method1(self):
print "method1"
foo = Foo("abc")
foo.method1()
Если вы хотите иметь более универсальный декоратор, лучше объявить вызываемый класс:
class decorator:
def __init__(self,varname):
self.varname = varname
def __call__(self,function):
varname=self.varname
def wrapper(self,*args,**kwargs):
print "Doing something with self.%s==%s" % (varname,getattr(self,varname))
return function(self,*args,**kwargs)
return wrapper
Использование:
@decorator("var1")