2017-01-07 11 views
-1

このクラスをPython 3で動作させる方法を理解しようとしています。これはPython 2で動作します。これは、ジェネレータのためのD. Beasleyのチュートリアルです。私はPythonが初めてで、チュートリアルをオンラインで作業しています。python 2対python 3クラスwith __iter__

のPython 2

class countdown(object): 
    def __init__(self, start): 
     self.count = start 
    def __iter__(self): 
     return self 
    def next(self): 
     if self.count <= 0: 
      raise StopIteration 
     r = self.count 
     self.count -= 1 
     return r 

c = countdown(5) 

for i in c: 
    print i, 

のPython 3、機能していません。

class countdown(object): 
    def __init__(self, start): 
     self.count = start 
    def __iter__(self): 
     return self 
    def next(self): 
     if self.count <= 0: 
      raise StopIteration 
     r = self.count 
     self.count -= 1 
     return r 

c = countdown(5) 

for i in c: 
    print(i, end="") 
+0

これはdocsにも記載されています。https://docs.python.org/3.0/whatsnew/3.0.html#operators-and-special-methods – jonrsharpe

答えて

2

イテレータのための特別な方法は、他の特殊な方法を一致させるためにはPython 3にnextから__next__に改名されました。

あなたはそれがでnextの定義に従うことによって、コードを変更せずに両方のバージョンで動作させることができます。

__next__ = next 

ので、Pythonのそれぞれのバージョンは、それが期待する名前を検索します。

+0

ありがとうございました。私は__iter__に集中していました。問題は、 "次の"声明を研究しなかった。 – Neal