类成员变量不在本地处理

时间:2013-08-03 21:41:07

标签: python variables

请看下面的代码:

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

有什么问题?我该如何解决?

2 个答案:

答案 0 :(得分:2)

类范围中定义的变量是类变量,并且在所有类实例之间共享(它们存储在类对象本身上,而不是存储在实例上)。 只需初始化 init 函数中的变量。

class Node:    
    def __init__(self, f, l):
        self.feature = [f]
        self.label = [l]

答案 1 :(得分:1)

问题是您正在尝试“声明”类块中类实例的成员数据。这不是Python的工作原理。

类块中定义的所有内容(包括featurelabel__init__)都会成为表示类本身的对象的属性,而不是班级的实例。尝试访问实例中不存在的属性将回退到类,这是方法查找的工作方式。

在实例存在且您有对它的引用之前,无法在实例上创建属性。 __init__方法的目的是为您提供一个地方。因此,应在__init__中设置实例成员数据的初始值;试图在类块中声明这些初始值实际上做了其他事情。