忽略约束器中的Python默认值?

时间:2017-05-13 23:57:29

标签: python constructor default-value

我是python的新手。当我在Python中编码时,我注意到这种奇怪的行为:

等级x:

class x:
    x1 = 0

    def __init__(self, x):
        self.x1 = x

类xcontainer:

class xContainer:
    coint = []

    def __init__(self, coint = []):
        self.coint = coint

    def add_x(self, x):
        self.coint.append(x)

当我尝试运行此代码时:

def Main():
    list_xcon = []
    for i in range (0,2):
        xcon = xContainer()
        for j in range (i, i+1):
            xcon.add_x(x(j))
        list_xcon.append(xcon)

    for xcont in list_xcon:
        for xc in xcont.coint:
            print xc.x1

我得到了那些结果:

  

0 1 0 1

但是当我运行此代码时:

def Main():
    list_xcon = []
    for i in range (0,2):
        listt = []
        xcon = xContainer(listt)
        for j in range (i, i+1):
            xcon.add_x(x(j))
        list_xcon.append(xcon)

    for xcont in list_xcon:
        for xc in xcont.coint:
            print xc.x1

我得到了那些结果:

  

0 1

为什么?根据{{​​1}},class xcontainer的默认值应为coint - 空列表。那么为什么发送空列表会改变结果?

顺便说一句,我认为使用[]作为默认设置并检查coint = None是更好的方法,但似乎它不会在此更改结果。

我将不胜感激任何解释。我很困惑。

感谢。

0 个答案:

没有答案