методы ооп 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)
Но автор кода, почему-то, захотел так.