Python类奇怪的行为

时间:2018-01-24 15:35:07

标签: python class

以下代码的工作方式与我的预期不同:

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的列表,其中包含一个元素2。相反,我得到三个元素,分别是列表[2][2, 2][2, 2, 2]

我假设以这种方式在该类中创建类的对象会导致变量静态地动作但我不确定为什么以及如何以我喜欢的方式编写此代码它起作用。

1 个答案:

答案 0 :(得分:2)

此处的问题是places=list()默认参数。它与类没有任何关系,但是python解析这条线的方式。有效地,该行在文件解析时执行一次,因此list()的值仅计算一次:在加载时。

这样,当你做了很多时,第二个和第三个就完成了。

你应该尝试的是这样的事情(对于函数defs也是如此):

class A:
    def __init__(self, depth=0, places=None):
       if not places:
           places = list()
       # ... continue with code

请参阅https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/custom-icons/