İşlevleri üzerinde sık sık yinelenen bir desen var ve bu deseni bir dekoratöre dönüştürmek istedim. Fakat şu ki, bu dekoratörün mevcut örneğin bazı özelliklerine erişmesi gerekiyor, bu yüzden onu bu sınıftaki bir yönteme dönüştürmek istedim. Bununla bazı problemlerim var.Bir yöntem aynı sınıfın başka bir yönteminin bir dekoratör olabilir mi?
Yani, bu ne istiyorum benzer:
class DullRepetitiveClass:
def __init__(self, nicevariable):
self.nicevariable = nicevariable
def mydecorator(self, myfunction):
def call(*args, **kwargs):
print "Hi! The value of nicevariable is %s"%(self.nicevariable,)
return myfunction(*args, **kwargs)
return call
@mydecorator #Here, comment (1) below.
def somemethod(self, x):
return x + 1
(1) İşte sorundur. somemethod
yöntemini süslemek için DullRepetitiveClass.mydecorator
yöntemini kullanmak istiyorum. Ancak, şu anki örnekte dekoratör olarak yöntemi nasıl kullanacağım konusunda hiçbir fikrim yok.
Bunu yapmanın basit bir yolu var mı?
DÜZENLEME: Tamam, cevap oldukça açık. Sven'in aşağıda belirttiği gibi, dekoratörün kendisi de yöntemi değiştirir. Metodun kendisi ile ilgili her şeyi ele almalıdır:
Lütfen girintinizi düzeltin. Ayrıca, kodunuzun herhangi bir sınıf yöntemi içermediğini unutmayın. –
“Kendi” dışında bir * farklı * örneğini “sanallaştırıcı” nı 'somemethod' olarak dekore etmek için nasıl ileteceğinizi mi düşünüyorsunuz? – kojiro
Oops. Vimden kopyalamak ve tarayıcıya yapıştırmak bazen bir acı olabilir ... –