2015-01-08 104 views
2

我在移植庫到Python 3的過程中我發現這個方法:我應該用什麼來代替.__ getslice__?

def __getslice__(self, index, listget=list.__getslice__): 
    self._resolve() 
    return listget(self, index) 

因爲.__getslice__被淘汰,會產生錯誤。我看了看文檔,而且好像.__getitem__是大多數人都使用什麼來代替.__getslice__。唯一的問題是,這個圖書館有一個酷似除了它上面的方法被稱爲__getitem__listget=list.__getitem__)方法。我不知道爲什麼他們的代碼所做的這種區別,但它似乎是圖書館的原設計者希望保留兩種方法的獨特功能。有什麼辦法可以保持這一點,而移植到Python 3?

回答

5

你應該能夠簡單地刪除__getslice__方法都在一起。現在(在python3.x)__getitem__處理相同案件__getslice__用於除案件來處理__getitem__處理 - 所以,在python3中,__getslice__方法上的自定義類(也許是它的外觀列表子類)不應該被稱爲。

還要注意的是,如果這是一個列表的子類,那麼就應該使用super來調用父類:

def __getitem__(self, index): 
    self._resolve() 
    return super().__getitem__(index) 
相關問題