[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