-2

看下面的代码:

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

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

4

2 回答 2

2

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

class Node:    
    def __init__(self, f, l):
        self.feature = [f]
        self.label = [l]
于 2013-08-03T21:44:09.123 回答
1

问题是您正试图为类块中的类实例“声明”成员数据。这不是 Python 的工作方式。

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

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

于 2013-08-04T02:00:48.207 回答