Mark I Colonial Viper, equipped with kinetic energy weapons and conventional missiles
We are using icontract for
contract driven development, where we can specify class invariants
with icontract.invariant:
import icontract
@icontract.invariant(lambda self: 0 <= self.damage <= 1))
@dataclass(eq=False)
class Ship(GameObject):
owner: Player
damage: float = 1.0pre-conditions with icontract.require:
@icontract.require(lambda obj: isinstance(obj, GameObject))
@icontract.require(lambda pos: isinstance(pos, Position))
def assign_position(self, obj: GameObject, pos: Position) -> Position:
passand post-conditions with icontract.ensure:
@icontract.ensure(lambda result: isinstance(result, Position))
def add(self, obj: GameObject, pos: Position = None, ...):
...