我正在使用PyContract(不是PyContracts)为我的遗传算法框架实现按合同设计。
主模块是,它从(我们称之为)GA.py
调用一个函数。我已经为.crossover.py
foocross
foocross
现在,我希望在运行main
GA.py时检查这些条件。我引入了一个错误的前提条件foocross
只是为了测试是否正在检查合同,但似乎没有。我如何确保正在检查合同?
这是我的代码的最小部分:
# GA.py
def main():
# some code
crossover.foocross(params)
# some more code
if __name__ == "__main__":
main()
#crossover.py
def injectionco(p1, p2, chrom):
"""
pre:
isinstance(p1, int) # this should raise an error. p1 is never an int
isinstance(p2, list)
isinstance(chrom, int)
forall(p1, lambda elem: any(isinstance(elem, i.__class__) for i in p2))
forall(p2, lambda elem: any(isinstance(elem, i.__class__) for i in p1))
len(p1) == len(p2)
post:
p1 is __old__.p1
p2 is __old__.p2
p1 == __old__.p1
p2 == __old__.p2
isinstance(__return__, p1.__class__) # returns an individual
len(__return__) == len(p1)
id(__return__) not in [id(p1), id(p2)]
forall(__return__, lambda elem: __return__.count(elem) == 1)
"""
#code
return #something
PS:这对我来说是一个很难写的问题,因为我不得不删除很多代码(因为框架非常复杂)而且我是按合同设计的新手。因此,如果我错过了一些有助于回答这个问题的信息,请询问,我很乐意提供更多信息:)