2016-04-16 19 views
1

Wie kann ich NamedTuple mit einem Objekt ableiten, das veränderbare Felder und Methoden hat? Mein init nimmt ein Muster und alle Felder des Musters sollten aufrufbar sein.NamedTuple mit Methoden und änderbaren Feldern erweitern

class PatternSelection(Patterns.Pattern): 
    def __init__(self, pattern): 
     self.xflipped=False 
     self.yflipped=False 
     self.rotation=0 

    def horizontal_flip(self): 
     if self.rotation%2==0: 
      self.xflipped^=True 
     else: 
      self.yflipped^=True 

    def vertical_flip(self): 
     if self.rotation%2==0: 
      self.yflipped^=True 
     else: 
      self.xflipped^=True 

    def rotate_pattern(self): 
     self.rotation=(self.rotation+1)%4 

welcher sich:

Pattern=namedtuple('Patterns', 'width height rules commands')

Ich möchte eine Instanz von PatternSelection beziehen können, als ob es ein Muster waren, aber ich möchte auch in der Lage sein, es zu drehen und kippen durch seine Methoden.

Antwort

0

Ich löste es durch die Verwendung __new__ statt __init__:

def __new__(cls, pattern): 
    new_selection = super().__new__(cls, *pattern) 
    new_selection.xflipped = False 
    new_selection.yflipped = False 
    new_selection.rotation = 0 
    return new_selection 
Verwandte Themen