[Python] Anomalia nella classe?

Gollum1 gollum1.smeagol1 a gmail.com
Sab 22 Giu 2013 17:01:42 CEST


Il 22 giugno 2013 16:25, Marco Giusti <marco.giusti a gmail.com> ha scritto:
> 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"

ma questa non è una contraddizione rispetto al comportamento normale di Python?

Solitamente se assegno una variabile senza averla prima istanziata, mi
ritorna un errore...


--
Gollum1
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python