Наследование от класса buitin в Python - PullRequest
0 голосов
/ 27 февраля 2019

Как johny получает функциональность list, даже если третья строка в коде закомментирована, так как это инициализация? Так в чем же смысл этой строки?

class Namedlist(list):
    def __init__(self,name):
          list.__init__([])  #This line even if commented does not affect the output
          self.name=name

johny=Namedlist(john)
johny.append("artist")
print(johny.name)
print(johny)

>>john
>>artist

1 Ответ

0 голосов
/ 27 февраля 2019

Строка в вашем коде 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...