2014-11-14 3 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

no prob, добро пожаловать –

Смежные вопросы