Почему не работают методы от наследованного класса?

выдает RE. Не работает extend и вообще другие методы листа, которые не описаны в классы . Хотя ExtendedList наследуется от List.

import sys


class ExtendedList(list):
    def __init__(self, l):
        self.l = list(l)

    def __str__(self):
        return str(self.l)

    @property
    def reversed(self):
        return list(reversed(self.l))

    @property
    def first(self):
        return self.l[0]

    @first.setter
    def first(self, value):
        self.l[0] = value

    @property
    def last(self):
        return self.l[len(self.l) - 1]

    @last.setter
    def last(self, value):
        self.l[len(self.l) - 1] = value

    @property
    def size(self):
        return len(self.l)

    @size.setter
    def size(self, value):
        if len(self.l) > value:
            self.l = self.l[:value]
        else:
            self.l += [None] * (value - len(self.l))

    def append(self, value):
        self.l.append(value)
        self.last = value

l = ExtendedList(range(1000))
l.size = 1
l.extend([1, 2, 3])
print(l)

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

Автор решения: GrAnd

Нет надобности заводить внутри класса ещё один список, т.к. сам объект и есть список. Так что работайте с self как со списком.

class ExtendedList(list):
    @property
    def reversed(self):
        return self[::-1]

    @property
    def first(self):
        return self[0]

    @first.setter
    def first(self, value):
        self[0] = value

    @property
    def last(self):
        return self[-1]

    @last.setter
    def last(self, value):
        self[-1] = value

    @property
    def size(self):
        return len(self)

    @size.setter
    def size(self, value):
        if self.size > value:
            del self[value:]
        else:
            self += [None] * (value - self.size)


l = ExtendedList(range(1000))
l.size = 1
l.extend([1, 2, 3])
print(f"list={l}  size={l.size}  first={l.first}  last={l.last}  reversed={l.reversed}")
l.size = 15
l.last = "end"
print(l)
list=[0, 1, 2, 3]  size=4  first=0  last=3  reversed=[3, 2, 1, 0]
[0, 1, 2, 3, None, None, None, None, None, None, None, None, None, None, 'end']
→ Ссылка