Yves wrote:
(in surprise because C's __init__ doesn't over-ride next)
> class A(object):
>     def __init__(self, n): self.n = n
>     def __iter__(self): return self
>     def next(self):
>         if self.n > 0:
>             self.n -= 1
>             return "A: %d" % self.n
>         else: raise StopIteration()
> 
> class C(A):
>     def __init__(self, n):
>         super(C,self).__init__(n)
>         self.next = self.mynext
>     def __iter__(self): return self
>     def mynext(self):
>         if self.n > 0:
>             self.n -= 1
>             return "C: %d" % self.n
>         else:
>             raise StopIteration()

The answer is to understand the following code:
     class Xyz(object):
         def __init__(self): self.x = 23
         def x(self): return 42
     print Xyz().x

New-style classes control object attribute lookups,
and messages go to the class first (ignoring the instance
dictionary).  That is also how "properties" work, which
(if you think about it right) could not otherwise survive
the first assignment of the property.

--Scott David Daniels
[EMAIL PROTECTED]
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to