这是my previous question的后续内容
我正在使用PyContract(而不是PyContracts)为类方法编写一些约束。作为后置条件,我想确保某个对象的内存地址没有改变,即id(myObj)
在调用函数前后应该是相同的。我怎样才能用PyContract做到这一点?你知道吗
我现在要做的是:
def foo(param1, param2)
"""
# some other constraints
post[param1, param2]:
__old__.param1 is param1
__old__.param2 is param2
"""
然而,这种后置条件失败了。我只能想象这是因为__old__.param1
与param1
存储在不同的内存位置。这是有意义的,因为PyContract需要在执行foo
之前复制param1
,以便在执行foo
之后对照param1
的值检查其值。你知道吗
假设上面的分析是正确的,它只是用来解释为什么id(__old__.param1)
不同于id(param1)
。然而,它仍然没有回答我如何确保id(param1)
不会因为foo
的副作用而改变。我怎么能在合同里查这个?你知道吗
我不熟悉您正在使用的PyContract库,但是您正在测试的实际契约在Python中没有多大意义,因为函数参数是通过引用传递的。如果您有如下代码:
然后函数将接收对调用范围中由
x
和y
命名的对象的引用。在函数调用中,有两个单独的变量被初始化,并引用了这些参数。你知道吗因此,对函数中这些变量的更改不会影响调用范围中
x
和y
的绑定。你知道吗相关问题 更多 >
编程相关推荐