这只是一个原则。当一个攻击位置(骑士,主教或典当)被改变而不必重复第1行时,我希望被攻击的位板被更新。这可能吗?做这个的最好方式是什么?以borg类的方式或简单地使用词典的行为:
attacked = pawn_attacks | knight_attacks | bishop_attacks
pawn_attacks =(1<<(pawn + 9))| (1<(
当其中一个攻击发生变化时,这不会透明/自动地工作。受攻击的结果总是低于1.
class Test(object):
def __init__(self):
self.pawn_attacks = 0
self.knight_attacks = 0
self.bishop_attacks = 0
@property
def attacked(self):
return self.pawn_attacks | self.knight_attacks | self.bishop_attacks
test = Test()
test.pawn_attacks = 1
print test.attacked
test.pawn_attacks = 2
print test.attacked
答案 0 :(得分:0)
如果您正在编写课程,则可以将attacked
设为(只读)属性,以便在需要时透明地重新计算:
... rest of the class ...
@property
def attacked(self):
return self.pawn_attacks | self.knight_attacks | self.bishop_attacks
现在给定一个类的实例x
,x.attacked
将始终是最新的(如果需要的话,缓存到只重新计算是不合理的,因为无论如何操作都是如此基础)。
如果您不愿意上课,则必须将attacked
专门设为功能才能使相同的想法发挥作用。然而,尽管Python并没有像其他语言那样强迫你使用类,但是当它们提供结构和/或方便时使用类,就像这里一样,仍然是一个好主意: - )