使用方法和可变字段扩展 NamedTuple
Extending NamedTuple with Methods and Mutable Fields
如何使用具有可变字段和方法的对象子类化 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')
我希望能够像引用 Pattern 一样引用 PatternSelection 的实例,但我也希望能够通过它的方法旋转和翻转它。
我用 __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
如何使用具有可变字段和方法的对象子类化 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')
我希望能够像引用 Pattern 一样引用 PatternSelection 的实例,但我也希望能够通过它的方法旋转和翻转它。
我用 __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