使用方法和可变字段扩展NamedTuple

时间:2016-04-16 03:54:45

标签: python-3.x subclassing namedtuple

如何将NamedTuple子类化为具有可变字段和方法的对象? 我的 init 采用了一种模式,模式的所有字段都应该是可调用的。

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的实例称为Pattern,但我也希望能够通过它的方法旋转并翻转它。

1 个答案:

答案 0 :(得分:0)

我使用__new__而不是__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