注释很糟糕,所以让你的代码为你做它与番石榴一样的前提条件,实际上也做了一些事情。
pyConditions的Python项目详细描述
注释是很糟糕的,所以让你的代码为你做它的前提条件是 做点什么。
示例:
frompyconditions.preimport*@Between("b",1,10)defdivideAbyB(a,b)returna/b@NotNone("a")@Between("a","a","n")@NotNone("b")@Between("b","n","z")defconcat(a,b):returna+b@Custom("a",lambdax:x%2==0)@Custom("b",lambdax:notx%2==0)defevenOdd(a,b):returna*b
文档本身就有代码,如果您违反了 先决条件,然后抛出一个pycondition异常 错误消息多于断开的代码。
evenOdd(3,1)
pyconditions.exceptions.PyCondition: 3 did not pass the custom condition for parameter 'a' in function evenOdd
一些后置条件怎么样?
frompyconditions.postimport*@NotNone()deftest(a):returna@Custom(lambdaa:a%2==0)defeven(a):returna
test(None)
pyconditions.exception.PyCondition: The return value for uber.awesome.project.test was None
你也可以把两者混合起来。
frompyconditionsimportprefrompyconditionsimportpost@pre.Custom("a",lamdaa:a%2==0)@post.Custom(lambdaa:a%2==0)defsuperSafeEven(a):returna
想要一些类不变的恶作剧吗?
frompyconditions.invariantimportInvariant,FieldsNotNone@FieldsNotNone(["test"])classTest:def__init__(self):self.test=1defadd(self):returnself.test+1defset(self,v):self.test=vt=Test()printt.add()t.set(None)
最后一次调用add将导致不变量失败,从而引发 以下内容:
pyconditions.exceptions.PyCondition: Field "test" was None when it should not have been in invariant "notNone"
需要自定义不变量吗?
frompyconditions.invariantimportCustomInvariantdefinvariant(self):returnself.test==1@CustomInvariant("test",invariant)classTest(object):def__init__(self):self.test=1defmethod1(self):self.test
这很好,但是环境会让我的代码慢很多?没问题。
frompyconditions.stageimportStagestage=Stage()stage.prod()
只要把它放在你的代码里,你就没事了。仍然有 一些开销,主要是每个方法有两个函数调用, 包装器和原始函数。但是,对于叠加的前提条件 它不会在其他条件下执行,并且 调用prod时的invraiants。如果你想回到dev然后 调用dev()。
您想添加条件吗?使用代码打开PR。
有问题吗?使用固定代码打开PR。