Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa
AWS è il principale operatore di servizi cloud al mondo e da tempo parla delle misure che mette in atto per garantire una maggiore sovranità alle organizzazioni europee. L'azienda ha ora lanciato AWS European Sovereign Cloud, una soluzione specificamente progettata per essere separata e distinta dal cloud "normale" e offrire maggiori tutele e garanzie di sovranità
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto
Xiaomi ha portato sul mercato internazionale la nuova serie Redmi Note, che rappresenta spesso una delle migliori scelte per chi non vuole spendere molto. Il modello 15 Pro+ punta tutto su una batteria capiente e su un ampio display luminoso, sacrificando qualcosa in termini di potenza bruta e velocità di ricarica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-02-2012, 14: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, 14: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, 16: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, 16: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, 16: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


Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Pannelli solari al contrario? Non propri...
Google Gemini si espande: arrivano le es...
Mercato TV: la leadership di Samsung reg...
L'AI che lavora 100 volte più vel...
LIDAR, battaglia finale: MicroVision met...
Il 2025 è stato l'anno di BYD: +2...
L'IA enterprise entra nella fase decisiv...
Il tiktoker Khaby Lame cede la sua socie...
Apple Pencil Pro scende a 122€ su Amazon...
Ring in forte sconto su Amazon: videocit...
Blink torna a fare sul serio: Mini 2K+ c...
Edison aveva creato il grafene senza sap...
Reno15 Series: la nuova frontiera OPPO p...
XeSS 3 debutta ufficialmente: Multi-Fram...
Nuovo sfidante per NVIDIA: una startup c...
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: 17:29.


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