2011-05-12 17 views
9

Acabo de empezar a aprender Python y estoy leyendo sobre clases.problemas con el método __next__ en python

este es el código que había escrito para una clase simple iterable:

class maths: 
      def __init__(self,x): 
      self.a=x 
      def __iter__(self): 
      self.b=0 
      return self 
      def next(self): 
      if self.b <= self.a: 
       self.b = self.b+1 
       return self.b-1 
      else: 
       raise StopIteration 


x=maths(5) 
    for l in x: 
     print l 

para el método next() cuando usé el __next__ (auto):
se muestra el siguiente error

Traceback (most recent call last): 
    File "class.py", line 20, in <module> 
    for l in x: 
TypeError: instance has no next() method 

¿Puede alguien elucidar sobre este comportamiento. Vi un ejemplo en el libro de buceo en python 3 por Mark Pilgrim que utilizó el método __next__. incluso el ejemplo no se ejecutó en mi intérprete. ¡Gracias por tomarse su tiempo libre para ayudarme!

+0

relacionadas: [no hay función next() en un generador de rendimiento en Python 3] (https://stackoverflow.com/questions/12274606/theres -no-next-function-in-a-yield-generator-in-python-3) – user2314737

Respuesta

32

Está utilizando Python 2.x, que ha usado .next() desde siempre y aún lo hace, solo Python 3 renombró ese método a .__next__(). Python 2 y 3 no son compatibles. Si está leyendo un libro 3.x, use Python 3.x usted mismo, y viceversa.

Para Python 2.x, puede cambiar a __next__()next()

Cuestiones relacionadas