2012-05-17 65 views
0

我仍在學習如何使用對象。我將頂點()定義爲一個方法來返回圖中的頂點(初始化爲vs)。我知道有一個更簡潔,優雅的書寫頂點的方法(),但究竟如何逃避我。如何從方法內引用對象變量

還特別這涉及在心裏想着複雜行使2.5:http://greenteapress.com/complexity/html/book003.html#toc12

class Graph(dict): 
    def __init__(self, vs=[], es=[]): 

     for v in vs: 
      self.add_vertex(v) 

    def add_vertex(self, v): 
     """Add a vertex to the graph.""" 
     self[v] = {} 

    def vertices(self): 
     v = [] 
     for i in range(len(self)): 
      v.append(i) 
     return v 
+1

我想'add_vertex'和'vertices'方法應縮進。 – mshsayem

+0

他們應該 - 我沒有直接粘貼,這是我的錯誤。 – Chris

+1

另外,不要使用列表作爲默認參數。 http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – mshsayem

回答

1

你可以把它與列表理解一行:)

def vertices(self): 
    return [i for i in range(len(self))] 
+1

或者只是'返回範圍(len(self))'。 –

+0

哈哈是啊(只要你使用python 2x) – Odoood

+0

在3.x中,'list(range(len(self)))'就足夠了。 –

1

我定義的頂點(作爲方法來返回頂點(在圖中初始化爲 as vs)。

由於vs__init__包含字典的鍵,我猜這是你想要的。

def vertices(self): 
     return self.keys() 

如果是這樣,你不需要vertices方法在所有 - 只是一直用Graph.keys()

相關問題