Marco De Paoli, alle 12:06 del 24/04/2015, digitò:


Il giorno 24 aprile 2015 11:51, Gabriele Battaglia <iz4...@libero.it
 <mailto:iz4...@libero.it>> ha scritto:

Scrivo questo codice e non capisco il perchè dell'errore finale.

d={1:34,2:22} d
{1: 34, 2: 22}
for k,v in d.items():
...     print k,v ... 1 34 2 22
for k,v in vars.items():
...     print k,v ... Traceback (most recent call last): File
"<console>", line 1, in <module> AttributeError:
'builtin_function_or_method' object has no attribute 'items' ***


in effetti vars è una funzione built-in
https://docs.python.org/2/library/functions.html#vars

per cui quello che ti sta dicendo python è giusto

Ma vars risulta di type dict(), quindi... non dovrebbe avere anche
lui il suo bravo .items?


in realtà il valore di ritorno di vars è di tipo dict vars, in se, è
una funzione, per cui devi chiamarla passandogli un argomento che
abbia un attributo __dict__

E se non ce l'ha, come faccio ad iterare attraverso gli elementi di
vars?


ma tu cosa volevi fare esattamente? d.items non ti andava bene?
Ciao Marco e grazie per i suggerimenti.
Ho una classe con un numero n di parametri, poniamo siano 20.
Poi ho una lista che ne contiene alcuni, mettiamo 10.
Nella fase di inizializzazione delle istanze, mi serve copiare tutti i parametri il cui nome è contenuto nella lista, in un dizionario. Per questo devo risalire al nome dei parametri ed al loro valore, attraverso vars()

Ho scritto questo codice, che funziona:

        self.inv = {}
        for k, v in vars().items():
            if k in INVECCHIABILI:
                self.inv[k] = v
Così il dizionario self.inv, contiene tutte quelle voci che rappresentano una copia dei parametri iniziali.

Grazie giovanni P per il metodo di chiamata di vars().itmes()

GB.
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a