Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere?
HONOR Magic V6 è arrivato in Italia a 2.299,90 euro con una promessa precisa: unire 4 mm di spessore da aperto (8,75 mm chiuso nel modello White, 9 mm negli altri colori) a una batteria da 6.660 mAh, la più capiente mai vista su un pieghevole. Lo abbiamo usato per oltre una settimana in versione Red 16/512 GB per capire se lo Snapdragon 8 Elite Gen 5 tiene testa alla concorrenza anche fuori dai benchmark ufficiali
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni
Redmi Pad 2 9.7 punta su un display ampio e fluido, una batteria capace di accompagnare l'uso quotidiano senza ansie da ricarica e un prezzo accessibile, a partire da 179,90 euro per la versione con 64 GB di storage. Lo Snapdragon 6s 4G Gen 2 e i 4 GB di RAM della configurazione più diffusa frenano però chi cerca reattività e multitasking spinto: ecco il bilancio dopo due settimane di prova diretta
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Peugeot Polygon Concept: ecco il futuro delle utilitarie
Polygon è la concept car di Peugeot che mostra il futuro delle soluzioni del segmento B: tra design compatti e innovativi affiancati da dimensioni compatte uno scherzo dalla manovrabilità incredibile per le manovre a bassa velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-02-2012, 13:10   #1
snowx
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)
se provo:
Codice:
X=D([5,3])
print(X.Gdata())
mi dice che AttributeError: 'D' object has no attribute 'Gdata'

invece se faccio
Codice:
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?
snowx è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2012, 13:38   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
con questo:
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2012, 15:14   #3
snowx
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 12
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Non ho ancora usato i decoratori di classe per cui potrei anche sbagliare, ma prova a cambiare questo:
Codice:
aClass.getter = self.flaz
con questo:
Codice:
setattr(aClass, getter, self.flaz)
è perfetto

ma ora mi chiedo, come mai?
snowx è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2012, 15:57   #4
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 25-02-2012, 15:58   #5
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Perché con:
Codice:
aClass.getter = self.flaz
hai aggiunto l'attributo getter (esattamente con questo nome) alla classe (quindi è un attributo di classe) aClass, e gli fornito come valore il metodo bounded 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)
aggiunto sempre ad aClass un attributo, il cui nome è contenuto nella variabile getter, che contiene la stringa che hai costruito prima. Quindi contenendo getter 'Gdata', verrà creato l'attributo di classe che si chiama Gdata, appunto, il cui valore è il solito metodo bounded 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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HONOR Magic V6: spessore record e super batteria. È lui il fold da battere? Recensione HONOR Magic V6: spessore record e sup...
Redmi Pad 2 9.7: ampio display, economico e peso contenuto, ma qualche limite nelle prestazioni Redmi Pad 2 9.7: ampio display, economico e peso...
Peugeot Polygon Concept: ecco il futuro delle utilitarie Peugeot Polygon Concept: ecco il futuro delle ut...
Reno16 Pro: il compatto di OPPO punta su fotocamera da 200MP e il nuovo Bubble! La recensione Reno16 Pro: il compatto di OPPO punta su fotocam...
 Hisense 55U7SE: tuttofare e accessibile, il MiniLED per film, sport e gioco Hisense 55U7SE: tuttofare e accessibile, il Min...
I musulmani non dovrebbero usare le crip...
AMD Radeon 9000 pronte a sorpassare le N...
Soulframe, il nuovo gameplay chiarisce m...
La Commissione UE presenterà una ...
Niente più eliche: con due ali, i...
Waze si aggiorna con nuove funzioni IA: ...
Oltre 200 economisti ed esperti di IA la...
I migliori produttori del 2026? Facci sa...
Claude Code consuma fino a 33 mila token...
Si chiama Starfire il chip con cui Intel...
Chrome espone l'OS reale dietro ogni ric...
Intel investe altri 5 miliardi di euro p...
OPPO sceglie Clara per il debutto della ...
Migliori offerte sui robot aspirapolvere...
Nuove funzionalità per Network Se...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v