[Tutor] __setitem__

Gregor Lingl glingl at aon.at
Thu Feb 26 18:23:31 EST 2004



Hi Christopher!

>What does __setitem__ do?  From reading the docs, I
>think it has something to do with setting values in a
>class.
>  
>
... hmmm... better:  in an object ...  Let's see ...

>-Chris
>
>  
>
First an example:

 >>> class A:
    def __init__(self, n):
        self.data = [0]*n    # a list of n zeros
    def __setitem__(self, i, val):
        self.data[i] = val
    def __getitem__(self, i):
        return self.data[i]

   
 >>> a=A(10)
 >>> a[3]="huuu!"
 >>> for i in range(5):
    print a[i]

   
0
0
0
huuu!
0
 >>>

Conclusion: if a class A defines the special method __setitem__
it  makes the expression   a[i]  meaningful for any instance a of A.
So you can set values via an index. Of cours you must provide
correctness:

 >>> a[12]="outch!"

Traceback (most recent call last):
  File "<pyshell#13>", line 1, in -toplevel-
    a[12]="outch!"
  File "<pyshell#7>", line 5, in __setitem__
    self.data[i] = val
IndexError: list assignment index out of range
 >>>

This doesn't work, since the data attribute has length 10 only.

In the same way the __getitem__ special method lets you access
the components of a.data via the [...] - operator.

Do you have some previous experience with procramming with classes
in Python? If not, tinkering with special methods isnot a very
good starting point, I think ...

Regards,
Gregor




>=====
>"I'm the last person to pretend that I'm a radio.  I'd rather go out and be a color television set."
>-David Bowie
>
>"Who dares wins"
>-British military motto
>
>"The freak is the norm." - "The Infernal Desire Machines of Dr. Hoffman" by Angela Carter
>
>_______________________________________________
>Tutor maillist  -  Tutor at python.org
>http://mail.python.org/mailman/listinfo/tutor
>
>
>  
>



More information about the Tutor mailing list