2013-07-12 108 views
0

看來他們唯一的價值在於存儲屬性。即使那樣,那些無法更改或變化反映在所有實例!python類有什麼好處?

如果我這裏有一類:

# Vertex 
class Vertex: 
    label = str() 
    ID = int() 
    outEdges = list() 
    inEdges = list() 

做出新的頂點對象:

v = Vertex() 

,並添加到V的outedges:

v.outEdges.append(1) 

然後Vertex.outEdges不再是一個空列表,而且還包含1.

那麼應該如何使用python類呢?使用複製模塊?一點也不?

+2

你爲什麼要使用類的屬性?如果您的數據只應用於單個實例,請將其作爲實例的一部分。 – geoffspear

+2

使類屬性反映在所有實例中。 – Matthias

回答

6

您聲明的屬性是類級別的,並且由該類的所有實例共享。你需要,如果你想這些值是特定於實例的使用恰當的初始化/構造函數:

# Vertex 
class Vertex: 
    def __init__(self): 
     self.label = str() 
     self.ID = int() 
     self.outEdges = list() 
     self.inEdges = list() 

您還可以創建類的方法,而不是屬性。

class Vertex: 
    # def __init__(self): ... 

    def allEdges(self): 
     return self.outEdges + self.inEdges 
+0

太好了,謝謝。很高興知道。 – NargothBond

2

如果您需要該類的不同實例,則需要一個instantiation method

class Vertex: 
    def __init__(self): 
     self.label = str() 
     .... 
1

[..]將更改的所有實例體現!

如果您按照您所做的那樣定義屬性,則它們將表現爲在給定類的所有實例之間共享的靜態屬性。

如果你想獲得不共享屬性的值,你需要定義它像定類的實例:這裏

# Vertex 
class Vertex: 
    def __init__(self): 
     self.label = str() 
     self.ID = int() 
     outEdges = list() 
     inEdges = list()