这只是一个原则。我希望当其中一个攻击比特板(骑士、主教或典当)被更改而不必重复第1行时,被攻击的比特板被更新。这可能吗?做这件事最好的方法是什么?在borg类中,或者简单地使用字典的行为:
当其中一次攻击发生变化时,它不会透明地/自动地工作。以下的攻击结果总是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发布于 2015-02-02 01:02:27
如果要编写类,则可以使attacked成为(只读)属性,以便在需要时透明地重新计算:
... rest of the class ...
@property
def attacked(self):
return self.pawn_attacks | self.knight_attacks | self.bishop_attacks现在,给定类的实例x,x.attacked将始终是最新的(如果需要,缓存只在需要时重新计算是不需要的,因为操作是非常基本的)。
如果您不愿意创建一个类,那么就必须将attacked作为一个函数来实现同样的想法。然而,虽然Python并没有强迫您像其他语言那样使用类,但是在类提供结构和/或方便时使用类,比如这里,仍然是一个好主意:-)
https://stackoverflow.com/questions/28269728
复制相似问题