這是一個後續的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
相同的內存位置。這很有意義,因爲在執行foo
之前,PyContract需要複製param1
,以便在foo
完成執行後檢查其值與param1
的值。
假設上述分析屬實,它只能解釋爲什麼id(__old__.param1)
與id(param1)
不同。然而,它仍然沒有回答我如何確保id(param1)
不會作爲foo
的副作用而改變。我怎麼能在PyContract中檢查這個?
這並不能解釋PyContract的行爲,但您希望通過該後置條件來實現什麼目標? Python通過引用傳遞函數參數,所以函數將無法改變它們在外面引用的內容。如果函數改變了這些名稱在函數內引用的內容,它也不會改變外部綁定。 –
@JamesHenstridge:touche!我根本沒有考慮過python的行爲。我更專注於實際的合同。如果您發表評論作爲答案,我會接受它 - 它完美地回答了我的問題 – inspectorG4dget