LINUX.ORG.RU

Python: как в наследнике списка получить доступ к элементам?


0

0
class MyList(list):
    def __init__(self, *args):
        list.__init__(self, args)

    def advSearch(self, criteriaMap):
        # как тут произвести итерацию по элементам?

Пока вижу что-то вроде этого:

for item in self.__getslice__(0, len(self)):
    # doing smth.

# Или ``for item in self'' будет правильней?

но мне это кажется неправильным вариантом.

Спасибо.

anonymous

Ответ на: комментарий от Davidov

А что может быть неправильного в этом варианте. По-моему, всё нормально.

Davidov ★★★★
()

for item in self нормально будет. И красиво и понятно. Чем этот вариант не устраивает? :).

true_admin ★★★★★
()

> for item in self.__getslice__(0, len(self)):
> # Или ``for item in self'' будет правильней?


for item in self будет работать, по крайней мере до тех пор
пока тебе не придет в голову переопределить __iter__.

а правильно будет for item in list.__iter__(self)

и выкинь __getslice__, потому что он тебе копирует весь список
а тебе это нахрен не надо

anonymous
()
Ответ на: комментарий от true_admin

> Оно и так по дефолту __iter__ вызовит при итерации, смысла его явно указывать нет

зато у любого кто будет этот код потом читать не возникнет никаких сомненийо том что именно тут происходит

anonymous
()
Ответ на: комментарий от anonymous

>зато у любого кто будет этот код потом читать не возникнет никаких сомненийо том что именно тут происходит

А какие могут быть сомнения? Класс — наследник списка.

Davidov ★★★★
()
Ответ на: комментарий от Davidov

>А какие могут быть сомнения? Класс — наследник списка.

В случае с list.__iter__(self) в явном виде вызывается метод базового класса. В случае с for item in self - твоего класса-наследника.

SSN
()
Ответ на: комментарий от Davidov

> А какие могут быть сомнения? Класс — наследник списка.

ну типа если писать iter(self) или for ... in self, то читателю надо лезть наверх к объявлению класса, проверять что он унаследован от list, проверять что __iter__ нигде не переопределен.

а list.__iter__ воспринимается контекстно-независимо

вопрос вкуса собственно говоря

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.