Python类怪异行为

2024-03-28 11:55:58 发布

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

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

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]。你知道吗

我假设以这种方式在类中创建一个类的对象会导致变量静态运行,但我不确定为什么以及如何以我希望的方式编写代码。你知道吗


Tags: 实例代码self列表lenifinitdef
1条回答
网友
1楼 · 发布于 2024-03-28 11:55:58

这里的问题是places=list()默认参数。这与类无关,而是python解析行的方式。实际上,该行在文件解析时执行一次,因此list()的值只计算一次:加载时。你知道吗

这样,当你得到很多a的时候,第二个和第三个就完成了。你知道吗

您应该尝试以下方法(对于函数def也是如此):

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

http://docs.python-guide.org/en/latest/writing/gotchas/

相关问题 更多 >