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

Gul*_*tin 2 python

class s:
    i = []

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


print(inc())
print(inc())
Run Code Online (Sandbox Code Playgroud)

我的输出:

1
2
Run Code Online (Sandbox Code Playgroud)

但我期待:

1
1
Run Code Online (Sandbox Code Playgroud)

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

gon*_*opp 10

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

class s:
    i = []
Run Code Online (Sandbox Code Playgroud)

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

在java中:

class S {
    static List i = new ...
    }
Run Code Online (Sandbox Code Playgroud)

你可能想这样做:

class s:
    def __init__(self):
        self.i = []
Run Code Online (Sandbox Code Playgroud)

这将在一个可变的实例,其被命名为自(类似于在Java或C++).__init__是类的构造函数.