[Python] Anomalia nella classe?
Marco Giusti
marco.giusti a gmail.com
Sab 22 Giu 2013 16:25:40 CEST
On Sat, Jun 22, 2013 at 02:57:14PM +0200, Gollum1 wrote:
> Il giorno 22/giu/2013 14:44, "Marco Giusti" <marco.giusti a gmail.com> ha
> scritto:
> >
> > On Sat, Jun 22, 2013 at 02:05:55PM +0200, Gollum1 wrote:
> > > Come è possibile che funzioni e non mi dia errore? il mio dubbio è
> > > dato dal fatto che la classe Block() è definita con solo un pass.
> > >
> > > come è dunque possibile che io possa aggiungere il blocco di dati e
> > > poi stamparli? non dovrebbe dare un errore?
> > >
> > > (in pratica non ho ancora definito l'attributo data nella classe).
> >
> > il tuo dubbio è il seguente?
> >
> > >>> class Block:
> > ... pass
> > ...
> > >>> b = Block()
> > >>> b.data = "ciao"
> > >>> print b.data
> > ciao
> > >>>
> >
> > perché python non ha bisogno di definire un attributo, la definizione è
> > al momento del primo assegnamento. ogni oggetto ha un attributo
> > "__dict__" che è il dizionario degli attributi e quanto provi accedere
> > ad un attributo, accedi anche a quel dizionario.
> >
>
> È quindi una assegnazione implicita... è come se venisse usato il metodo
> "extend" se non ricordi male, invece di insert... o sbaglio ad interpretare
> la cosa?
no, piuttosto __setitem__:
b.data = "ciao"
è equivalente a
b.__dict__["data"] = "ciao"
che poi sarebbe:
b.__dict__.__setitem__("data", "ciao")
ciao
m."data", "ciao"
Maggiori informazioni sulla lista
Python