Use this:-
class MyList(object):
def __init__(self, *a): self.a = list(a)#this has to be a list, was a
tuple earlier
def __len__(self): return len(self.a)
def __getitem__(self, i): return self.a[i]
def __setitem__(self, i, j): self.a[i] = j
b=MyList(3,4,5)
print b[1]
b[1]=7#self-explanatory
print b.a
On Mon, Sep 13, 2010 at 8:10 AM, guruyaya <[email protected]> wrote:
> In chapter 2, on the code example of "Special Attributes, Methods and
> Operators", we have
>
> class MyList(object)
> def __init__(self, *a): self.a = a
> def __len__(self): return len(self.a)
> def __getitem__(self, i): return self.a[i]
> def __setitem__(self, i, j): self.a[i] = j
> b = MyList(3, 4, 5)
> print b[1]
> a[1] = 7
> print b.a
>
> 1. The first line should be
> class MyList(object):
>
> 2. Running line 9 of the code produces this exception:
> >>> a[1] = 7
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> NameError: name 'a' is not defined
>
> I'm not sure what was intended to be demonstrated there, as even b[1]
> = 7 produces an excption, but it's not working.
>