2013-08-03 161 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__中設置實例成員數據的初始值;試圖在類塊中聲明這些初始值實際上是做了其他事情。