[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