以下代码的工作方式与我预期的不同:
class A:
def __init__(self, depth=0, places=list()):
print(len(places))
if depth < 3:
places.append(2)
a = A(depth + 1)
a = A()
我希望它是如何工作的,它创建了三个class A
实例,每个实例都有一个名为places with one element的列表2
。相反,我得到了三个元素,分别是列表[2]
、[2, 2]
、[2, 2, 2]
。你知道吗
我假设以这种方式在类中创建一个类的对象会导致变量静态运行,但我不确定为什么以及如何以我希望的方式编写代码。你知道吗
这里的问题是
places=list()
默认参数。这与类无关,而是python解析行的方式。实际上,该行在文件解析时执行一次,因此list()
的值只计算一次:加载时。你知道吗这样,当你得到很多a的时候,第二个和第三个就完成了。你知道吗
您应该尝试以下方法(对于函数def也是如此):
见http://docs.python-guide.org/en/latest/writing/gotchas/
相关问题 更多 >
编程相关推荐