确保变量的内存位置没有更改

2024-04-23 09:48:04 发布

您现在位置:Python中文网/ 问答频道 /正文

这是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__.param1param1存储在不同的内存位置。这是有意义的,因为PyContract需要在执行foo之前复制param1,以便在执行foo之后对照param1的值检查其值。你知道吗

假设上面的分析是正确的,它只是用来解释为什么id(__old__.param1)不同于id(param1)。然而,它仍然没有回答我如何确保id(param1)不会因为foo的副作用而改变。我怎么能在合同里查这个?你知道吗


Tags: 方法id内容fooismy条件old
1条回答
网友
1楼 · 发布于 2024-04-23 09:48:04

我不熟悉您正在使用的PyContract库,但是您正在测试的实际契约在Python中没有多大意义,因为函数参数是通过引用传递的。如果您有如下代码:

x = a
y = b
foo(x, y)

然后函数将接收对调用范围中由xy命名的对象的引用。在函数调用中,有两个单独的变量被初始化,并引用了这些参数。你知道吗

因此,对函数中这些变量的更改不会影响调用范围中xy的绑定。你知道吗

相关问题 更多 >