[Python] vars.items???

Gabriele Battaglia iz4apu a libero.it
Ven 24 Apr 2015 13:11:29 CEST



Marco De Paoli, alle 12:06 del 24/04/2015, digitò:
>
>
> Il giorno 24 aprile 2015 11:51, Gabriele Battaglia <iz4apu a libero.it
>  <mailto:iz4apu a 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.


Maggiori informazioni sulla lista Python