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