2013-08-03 122 views
-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 

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

+1

这不是我得到的代码输出。 –

+0

我认为问题在于'init'方法中,您正在使用append。 –

回答

2

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

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

问题是,您正尝试在类块中声明类实例的成员数据。这不是Python的工作原理。在类块(包括featurelabel,和__init__)定义

一切都变得代表该类本身,该类的未实例的对象的属性。试图访问实例中不存在的属性将回退到该类,这是方法查找的工作方式。

没有办法在实例上创建属性,直到它存在并且您有一个对它的引用。 __init__方法的目的是给你一个地方做这件事。因此,应该在__init__中设置实例成员数据的初始值;试图在类块中声明这些初始值实际上是做了其他事情。