请看下面的代码:
class Node:
feature = list()
label = list()
def __init__(self, f, l):
self.feature.append(f)
self.label.append(l)
我创建了这个类的两个实例:
n1 = Node(1,2)
print n1.feature
n2 = Node(3,4)
print n2.feature
我想要的输出是:
1
2
但真正的输出是:
1
1 2
有什么问题?我该如何解决?
答案 0 :(得分:2)
类范围中定义的变量是类变量,并且在所有类实例之间共享(它们存储在类对象本身上,而不是存储在实例上)。 只需初始化 init 函数中的变量。
class Node:
def __init__(self, f, l):
self.feature = [f]
self.label = [l]
答案 1 :(得分:1)
问题是您正在尝试“声明”类块中类实例的成员数据。这不是Python的工作原理。
类块中定义的所有内容(包括feature
,label
和__init__
)都会成为表示类本身的对象的属性,而不是班级的实例。尝试访问实例中不存在的属性将回退到类,这是方法查找的工作方式。
在实例存在且您有对它的引用之前,无法在实例上创建属性。 __init__
方法的目的是为您提供一个地方。因此,应在__init__
中设置实例成员数据的初始值;试图在类块中声明这些初始值实际上做了其他事情。