2016-04-16 3 views
1

どのようにフィールドとメソッドを変更可能なオブジェクトでNamedTupleをサブクラス化できますか? 私の初期はパターンをとり、パターンのすべてのフィールドを呼び出し可能にする必要があります。メソッドと可変フィールドでNamedTupleを拡張する

拡張
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 

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

を、私はそれがパターンであるかのようPatternSelectionのインスタンスを参照することができるようにしたいが、私もそれを回転させると反転することができるようにしたいですそれの方法によって。

答えて

0

私の代わりに__init__の__new__使用して、それを解決:

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 
関連する問題