Avrei aggiunto il metodo a un class
dinamicamente ... il nome della funzione passerà anche dinamicamente.aggiungere metodo a una classe dinamicamente con decoratore
Come posso fare? Ho cercato in questo modo
def decor(*var):
def onDecorator(aClass):
class onInstance:
def __init__(self,*args,**kargs):
setter=var
aClass.setter = self.flam
self.wrapped = aClass(*args,**kargs)
def __getattr__(self,attr):
return getattr(self.wrapped,attr)
def __setattr__(self,attr,value):
if attr == 'wrapped':
self.__dict__[attr]=value
else:
setattr(self.wrapped,attr,value)
def flam(self,*args):
self.__setattr__('dimension',len(args[0]))
return onInstance
return onDecorator
ma se lo faccio:
print(aClass.__dict__)
devo
'setter': <bound method onInstance.flam of <__main__.onInstance object at 0x522270>>
invece di var
: .....
ho questa classe :
class D:
def __init__(self, data):
self.data = data
self.dimension = len(self.data)
che definirei:
D.name()
e hanno di nuovo self.dimension
ma non so name
in anticipo
mostrano un esempio di codice che si spera di utilizzare per fissare il metodo alla classe. Non ho idea di come potresti avere un metodo che vuoi allegare, ma non di avere alcun tipo di nome per questo. Inoltre non ho idea di come ti aspetti che il metodo abbia un senso per essere associato alla classe, se la classe non è stata progettata con quel metodo in primo luogo. –
ha aggiornato la descrizione – fege