snowx
25-02-2012, 14:10
Sto cercando di aggiungere dei metodi dinamicamente ad una classe attraverso i decoratori, senza sapere a priori il nome del metodo, ho provato a fare cosi ma ci sono dei problemi:
def decor(*var):
def onDecorator(aClass):
class onInstance:
def __init__(self,*args,**kargs):
getter='G'+var[0]
aClass.getter = self.flaz
self.wrapped = aClass(*args,**kargs)
def __getattr__(self,attr):
return getattr(self.wrapped,attr)
def flaz(self):
return self.data
return onInstance
return onDecorator
@decor('data')
class D:
def __init__(self, data):
self.data = data
self.dimension = len(self.data)
se provo:
X=D([5,3])
print(X.Gdata())
mi dice che AttributeError: 'D' object has no attribute 'Gdata'
invece se faccio
X=D([5,3])
print(X.getter())
sembra funzionare, il problema è che io vorrei avere il comportamento che ho chiamando X.getter() quando chiamo X.Gdata e più in generale un X.Gxxx, come posso fare?
def decor(*var):
def onDecorator(aClass):
class onInstance:
def __init__(self,*args,**kargs):
getter='G'+var[0]
aClass.getter = self.flaz
self.wrapped = aClass(*args,**kargs)
def __getattr__(self,attr):
return getattr(self.wrapped,attr)
def flaz(self):
return self.data
return onInstance
return onDecorator
@decor('data')
class D:
def __init__(self, data):
self.data = data
self.dimension = len(self.data)
se provo:
X=D([5,3])
print(X.Gdata())
mi dice che AttributeError: 'D' object has no attribute 'Gdata'
invece se faccio
X=D([5,3])
print(X.getter())
sembra funzionare, il problema è che io vorrei avere il comportamento che ho chiamando X.getter() quando chiamo X.Gdata e più in generale un X.Gxxx, come posso fare?