|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Sep 2011
Messaggi: 12
|
[PYTHON] aggiungere metodi dinamicamente
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:
Codice:
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) Codice:
X=D([5,3]) print(X.Gdata()) invece se faccio Codice:
X=D([5,3]) print(X.getter()) |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non ho ancora usato i decoratori di classe per cui potrei anche sbagliare, ma prova a cambiare questo:
Codice:
aClass.getter = self.flaz Codice:
setattr(aClass, getter, self.flaz)
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Sep 2011
Messaggi: 12
|
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
DOPPIO.
![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Perché con:
Codice:
aClass.getter = self.flaz Per cui tutte le istanze di aClass erediteranno quest'attributo, che funzionerà come un metodo perché... contiene un metodo. ![]() Mentre con: Codice:
setattr(aClass, getter, self.flaz) Magie della dinamicità di Python. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:08.