为什么我在第二次通话后有2个?

时间:2013-12-06 13:09:35

标签: python

class s:
    i = []

def inc():
    t = s()
    t.i.append(len(t.i))
    return len(t.i)


print(inc())
print(inc())

我的输出:

1
2

但我期待:

1
1

因为每次创建新对象,我的错误在哪里?

5 个答案:

答案 0 :(得分:10)

您要附加的变量,而不是实例的变量

class s:
    i = []

此代码在类中创建一个变量。这类似于Java或C ++中 static 变量的概念。

在java中:

class S {
    static List i = new ...
    }

您可能想要这样做:

class s:
    def __init__(self):
        self.i = []

这会在实例中创建一个名为self的变量(类似于Java或C ++中的 this )。 __init__是该类的构造函数。

答案 1 :(得分:3)

你应该让我instance变量

class s:
    def __init__(self):
        self.i = []

答案 2 :(得分:3)

您已将i作为类本身的变量。

如果您想为每个类实例使用变量,请使用self

class s:
    def __init__(self):
        self.i = []

答案 3 :(得分:2)

您需要修改实例变量:

class s:
    def __init__(self):
        self.i = []

def inc():
    t = s()
    t.i.append(len(t.i))
    return len(t.i)

您现在正在修改类s的相同列表,因此它会从1增加到2。

答案 4 :(得分:0)

尝试将i设为实例变量。

class s:
    def __init__(self):
        self.i = []