Строка в вашем коде list.__init__([])
ничего не делает, потому что если вы хотите изменить объект, который вы создаете, вам нужно вызвать super()
не встроенный list
(или использовать list.__init__(self, [])
, но этомне кажется более запутанным).
Вызов super().__init__()
полезен, например, для передачи начальных данных для списка.
Я предлагаю вам изменить код на:
class NamedList(list):
def __init__(self, name, *args, **kwargs):
# pass any other arguments to the parent '__init__()'
super().__init__(*args, **kwargs)
self.name = name
Чтобы быть таким пользователем, как:
>>> a = NamedList('Agnes', [2, 3, 4, 5])
>>> a.name
'Agnes'
>>> a
[2, 3, 4, 5]
>>> b = NamedList('Bob')
>>> b.name
'Bob'
>>> b
[]
>>> b.append('no')
>>> b.append('name')
>>> b
['no', 'name']
Любая итерация работает как исходные данные, а не только списки:
>>> c = NamedList('Carl', 'Carl')
>>> c.name
'Carl'
>>> c
['C', 'a', 'r', 'l']