2014-11-14 86 views
1

覆蓋__get__我有一個類:問題在Python

from collections import UserList 


class ItemList(UserList): 
    data = [] 

    def __init__(self, contents): 
     self.data = contents 

    def __get__(self, index): 
     result = list.__get__(self, index) 
     if type(result) is list: 
      if len(result) > 1: 
       return ItemList(result) 
     else: 
      return result 

似乎在我的情況下得到甚至沒有被調用時,我指數ItemList類的一個實例。我試圖做的是返回ItemClass的新實例,如果索引的結果返回多個項目(列表)。所以,我希望這樣的:

>>> il = ItemList(contents) 
>>> type(il[1:3]) 
<class 'ItemList'> 

但我發現了這一點:

>>> il = ItemList(contents) 
>>> type(il[1:3]) 
<class 'list'> 

我在做什麼錯?

+0

@PadraicCunningham的['UserList'](https://docs.python.org/3.2/library/collections.html#collections.UserList )我假設的標準庫中的類。 –

+0

是的,抱歉,我沒有指定。編輯以提供清晰度。 –

+1

它是'__getitem__',而不是'__get__',你想覆蓋。 – kindall

回答

2

我想你想要更多的東西像下面這樣:

class ItemList(UserList): 
    data = [] 
    def __init__(self, contents): 
     super().__init__() 
     self.data = contents 
    def __getitem__(self, item): 
     result = UserList.__getitem__(self, item) 
     if type(result) is list: 
      if len(result) > 1: 
       return ItemList(result) 
     else: 
      return result 
+0

啊,那麼近。謝謝。 –

+0

沒有問題,不客氣 –