методы ооп python

Скажите, как в Python называются такие конструкции и что они делают?
list.__init __(self) и list.__getitem__

class A(list):
    def __init__(self, start):
        list.__init__(self) # что здесь происходит?
        self.start= start
 
    def __getitem__(self, item):
        try:
            return list.__getitem__(self, item) # что здесь происходит?
        except IndexError:
            return self.start

Ответы (1 шт):

Автор решения: Михаил Муругов
list.__init__(self) # что здесь происходит?

Вызывается конструктор класса list, который является родителем. Но обычно это делают так:

super().__init__()

Конструктор принимает аргумент self, указывающий на объект, который мы хотим инициализировать. В вызове list.__init__(self) мы говорим, что хотим инициализировать текущий объект (класса A) конструктором класса list.


return list.__getitem__(self, item) # что здесь происходит?

Здесь автор хотел "достучаться" до метода __getitem__ класса list и попытаться вызвать его для объекта класса A. В случае неудачи (IndexError) вернуть какое-то дефолтное значение self.start.

list.__getitem__(self, item) Зачем мы тут пишем __getitem__, если можно просто написать return self.list[item]?

Почему пишем __getitem__ - объяснил выше. Просто написать return self.list[item] нельзя, потому что экземпляр класса A не содержит атрибута с именем list (нигде не было self.list = ...). Если написать так, то это приведёт к AttributeError.

Здесь так же можно было (потому что наследуемся от list) написать:

super().__getitem__(item)

Но автор кода, почему-то, захотел так.

→ Ссылка