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
因为每次创建新对象,我的错误在哪里?
答案 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 = []