gpt4 book ai didi

python - python unittest中的变量范围

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:47 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
“Least Astonishment” in Python: The Mutable Default Argument

我在尝试运行一些单元测试 (python 2.7) 时看到一些与变量范围相关的奇怪行为:

我有一个包含名为“Dummy”的类的模块,该类具有一个列表作为实例变量。在我对该模块的单元测试中,我有两个单独的测试用例,每个测试用例都创建自己单独的 Dummy 实例。然而,第二个运行的测试中的 Dummy 实例似乎包含在第一个测试中创建的列表。这是代码:

我的模块.py:

class Dummy(object):
def __init__(self, mylist=[]):
self.mylist = mylist

test_mymodule.py:

class TestDummy(unittest.TestCase):
def testDummy1(self):
d1 = Dummy() # d1.mylist is empty, []
d1.mylist.append(1) # mylist = [1]
self.assertEqual(d1.mylist, [1])

def testDummy2(self):
d2 = Dummy() # d2.mylist = [1] !
d2.mylist.append(2) # d2.mylist = [1,2]
self.assertEqual(d2.mylist, [2]) # FAILS

其他详细信息:

  1. 如果我将 print mylist 作为 Dummy 的 init 方法的第一行,果然,在第二次测试运行时,它将 [1] 打印为如果 mylist=[1] 作为参数传入

  2. 如果我明确指定 dd = Dummy(mylist=[]),那么问题就会消失。它似乎与默认参数值有关,但我不清楚为什么在任何情况下它都会溢出到不同的范围。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com