2012-11-13 278 views
2

所以我有下面的代碼,其中,字典的值是一個對象,和密鑰給該對象是對象作爲這樣的文件:Python對象作爲字典值

class MyObject(): 
    def getName(self): 
     return self.name 

    def getValue(self): 
     return self.value 

    def __init__(self,name, value): 
     self.name = name 
     self.value = value 


dict = {} 
object = MyObject('foo', 2) //foo is the name, 2 is the value 
dict[object.getName()] = object 

但是我不能訪問對象像這樣:

>>>print dict['foo'].getValue() 
<bound method object.getValue of <__main__.object instance at 0xFOOBAR000 >> 

有沒有辦法以這種方式訪問​​對象?

編輯:

我不知道爲什麼,但我的代碼終於決定開始工作,所以對任何類似巡航能力的問題上面的代碼是有效的,應該工作。我目前Python版本是2.7.3

+1

是的,你可以。你的例子適用於我。它是如何失敗的?你有錯誤嗎? – BrenBarn

+0

沒有錯誤,我得到了<<主__。對象實例的綁定方法object.value在{some address} >> – Blackninja543

+0

您的粘貼代碼沒有方法,所以沒有任何意義。請發佈您正在運行的實際代碼。 – BrenBarn

回答

4

你總是需要調用函數時,包括括號,這麼寫:

dict['foo'].getValue() 

此外,getValue方法應該接受一個self參數和訪問例如通過它的屬性:

def getValue(self): 
    return self.value 

最後,那種編程風格,其中每個屬性都伴隨一個「getter」,在Python中是不鼓勵的。它是easy enough來實現計算的插槽,所以不需要獲取者。

名稱如dictobject也非常不鼓勵,因爲它們與built-in types相同的名稱相沖突。

編輯
的代碼是在此期間,編輯,渲染一些過時上述表示的。發佈代碼的最新版本在粘貼到Python時看起來工作得很好。

+0

這不是語法問題,我不能複製和粘貼代碼,所以我不得不縮短它的位數。在我的代碼中的關鍵工作正常,它返回正在嘗試訪問的對象的正確地址,但是這是它返回。 – Blackninja543

+1

@ Blackninja543:您需要複製並粘貼代碼。如果你「簡寫」它,你的「速記」給出了不同的錯誤,那麼沒有人能夠幫助你。要了解您使用的代碼中出現了什麼問題,我們必須查看您使用的實際代碼。你粘貼的代碼有一個語法錯誤,因爲你使用'//'而不是'#'來註釋。 – BrenBarn

+0

@ Blackninja543當我將最新的代碼粘貼到Python中並輸入'dict ['foo']。getValue()',它會打印'2',所以它現在可以工作。 – user4815162342