2016-11-25 4 views
0

は、子クラスで再利用ジェネレータカスタムクラスの__iter __()をオーバーライドする方法は?私がやろうとしている何

class Rect(object): 
    ... 
    def __iter__(self): 
     for y in xrange(self.tl.y, self.br.y + 1): 
      for x in xrange(self.tl.x, self.br.x + 1): 
       yield Point(x, y) 

です。私は何かを試してみました

class Block(Rect): 
    ... 
    def __iter__(self): 
     for p in super(Block, self): 
      yield p + self.offset 

しかし、明らかに動作しませんでした。

私の質問は、親クラスのコードをコピーせずに行うことができますし、継承されたコードの再利用性のための最もpythonicなアプローチは何ですか。次のように

+2

は、おそらくあなたが明示的に再利用できる機能(? '_iter_as_rect')に'のRect .__ iter__'の実装を移動する方が良いでしょう。 –

答えて

2

あなたはそれを行うことができます。

class Block(Rect): 
    def __iter__(self): 
     for p in super(Block, self).__iter__(): 
      yield p + self.offset 
関連する問題