Почему не работают методы от наследованного класса?
выдает 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']