2016-11-25 5 views
0

Was ich versuche zu tun, Wiederverwendung GeneratorWie überschreiben Sie __iter __() für die benutzerdefinierte Klasse?

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) 

in der Kinderklasse. Ich habe versucht, etwas wie

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

schreiben, aber offensichtlich hat das nicht funktioniert.

Meine Frage ist, kann getan werden, ohne Code von der Elternklasse zu kopieren und was am meisten Python Ansatz für die Wiederverwendbarkeit von geerbten Code ist.

+2

Vielleicht ist es eine bessere Idee, 'Rect .__ iter__' die Implementierung einer Funktion zu bewegen (' _iter_as_rect'?) Sie explizit wiederverwenden können. –

Antwort

2

Sie können es wie folgt:

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