В подклассе списка, как я могу назначить список явно при создании экземпляра? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть класс, который наследует от списка.Как назначить список при создании экземпляра вместо добавления к нему после создания?Пример кода:

class ListObject(list):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c


premade_normal_list = [0, 1, 2, 3, 4, 5, 6]
_list = ListObject(1, 2, 3) # Can I explicitly assign the premade list as this 
                            #  object while retaining attributes?
# How I now have to do it.
premade_normal_list = [0, 1, 2, 3, 4, 5, 6]
_list = ListObject(1, 2, 3)
for i in premade_normal_list:
    _list.append(i)

Я попробовал это, что не сработало, что неудивительно:

class ListObject(list):
    def __init__(self, a, b, c, _list):
        self = _list
        self.a = a
        self.b = b
        self.c = c

premade_normal_list = [0, 1, 2, 3, 4, 5, 6]
_list = ListObject(1, 2, 3, premade_normal_list)

Мне трудно объяснить, надеюсь, это достаточно ясно ...

Ответы [ 2 ]

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

Или просто добавьте дополнительный аргумент к вашему __init__():

class ListObject(list):
    def __init__(self, a, b, c, premade=None):
        self.a = a
        self.b = b
        self.c = c
        if premade is not None:
            self.extend(premade)

premade_normal_list = [0, 1, 2, 3, 4, 5, 6]
_list = ListObject(1, 2, 3, premade_normal_list)
0 голосов
/ 14 февраля 2019

Вам нужно будет вызвать родительский класс __init__.

def __init__(self, a, b, c, _list):
    super().__init__(_list)
    self.a = a
    self.b = b
    self.c = c

Однако учтите, что это делает определенные предположения о том, что другие классы могут наследовать от ListObject в будущем.Это определение не принимает никаких других неожиданных аргументов ключевого слова, которые могут потребоваться другому классу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...