aşağıdaki kendini değiştirecek bir sınıf yöntemi (cari nesne örneği) için bir dekoratör olması benim test koduPython dekoratör, kendini
class Test(object):
def __init__(self):
self.x = 5
def _change_x(self):
print "in _change_x"
def decorator(f):
print "in decorator"
def wrapped(*args, **kwargs):
print "in wrapped"
print args, kwargs
self.x = 8
f(*args, **kwargs)
return wrapped
return decorator
@_change_x
def print_x(self):
print "in print_x, x: %d" % self.x
return self.x
if __name__ == "__main__":
test = Test()
print "Initial value for x: %d" % test.x
print "Test if it changed? x: %d" % test.print_x()
dekoratöre sarılı dahili yöntem çağrılmıyor. Test kodumdaki hataya işaret etmeme yardımcı olabilir. Bu tür bir dekoratörün bir sınıfta tanımlanmasını istiyorum ve sınıf üyelerini çağrı saatinde değiştirmek için bu sınıftaki birkaç yöntemi süslemek için kullanılır.
Herhangi biri, her işlev çağrısından önce sınıf üyelerini (bu örnek için) değiştirmek için dekoratörden başka bir yöntem önerebilir. Değişikliğin okunabilirlik için opak olmasını istiyorum, bu yüzden onları sınıf yönteminin başlangıcında değiştirmem. – RPM
Bir fonksiyon çağrısından hemen önce neden bir şeyleri değiştirmek istediğinizi anlamak benim için biraz zor ... Problemi elimde bilmiyorum ama bu, kullanabileceğim herhangi bir şey için beklenmedik bir tasarım modeli gibi gözüküyor. düşünmeye çalışın (ki şu anda kabul edilmeyen durumlar var ;-)). – mgilson
Birçok yöntem çağrısından önce ek bir adımı olan @mgilson, son derece güçlü bir hata ayıklama aracıdır.basitçe 'print f ', program boyunca çeşitli noktalarda hangi yöntemlerin çağrıldığını gösterir. –