2013-03-04 62 views
4

請參考下面的代碼作爲示例:使用對象比使用字典僞對象有什麼好處?

import numpy as np 

N = 200 
some_prop = np.random.randint(0,100, [N, N, N]) 

#option 1 
class ObjectThing(): 
    def __init__(self, some_prop): 
    self.some_prop = some_prop 


object_thing = ObjectThing(some_prop) 



#option 2 
pseudo_thing = {'some_prop' : some_prop } 

我喜歡這個選項1提供,它使一個應用程序的操作更剛性和諸如此類的東西的結構。但是,我想知道是否還有其他更多的絕對好處,我不知道。

回答

1

使用對象的明顯優勢是可以擴展功能,而不僅僅是存儲數據。例如,您可以有兩個屬性,並定義和__eq__方法,該方法使用兩種屬性以某種方式使用其他而不是簡單地比較它們並返回False,除非兩者都匹配。另外,一旦你定義了一個類,你可以很容易地定義這個類的新實例,它將共享原始的結構,但是對於一個字典,你可能不得不重新定義這個結構或者做一個複製一些原始的東西,然後改變每個元素來匹配你想要的新僞對象的值。

詞典的主要優點是它們來與各種預定義的方法(如.items()),可以很容易地在使用in進行迭代,可以很方便地使用一個字典理解創建的,並允許容易地訪問數據「成員」使用字符串變量(儘管真的,getattr函數實現與對象相同的事情)。

1

如果您使用的是包含JIT編譯器(例如PyPy)的Python實現,使用實際對象可以提高編譯器優化代碼的能力(因爲編譯器更容易推理對象的成員與普通字典不同)。

使用對象還允許子類化,這可以節省一些冗餘的實現。

相關問題