Подкласс - Аргументы Из Суперкласса - PullRequest
21 голосов
/ 23 марта 2012

Я немного озадачен тем, как аргументы передаются между подклассами и суперклассами в Python. Рассмотрим следующую структуру класса:

class Superclass(object):
    def __init__(self, arg1, arg2, arg3):
        #Inilitize some variables
        #Call some methods

class Subclass(Superclass):
    def __init__(self):
        super(Subclass, self).__init__()
        #Call a subclass only method

У меня проблемы с пониманием того, как передаются аргументы между Суперклассом и Подклассом. Необходимо ли повторно перечислить все аргументы суперкласса в инициализаторе подкласса? Где будут указаны новые, только подкласс, аргументы? Когда я пытаюсь использовать приведенный выше код для создания экземпляра подкласса, он ожидает только 1 аргумент, а не исходный 4 (включая себя), который я перечислил.

TypeError: __init__() takes exactly 1 argument (4 given)

1 Ответ

22 голосов
/ 23 марта 2012

Волшебства не происходит!__init__ методы работают так же, как и все остальные.Вам нужно явно взять все необходимые аргументы в инициализаторе подкласса и передать их суперклассу.

class Superclass(object):
    def __init__(self, arg1, arg2, arg3):
        #Initialise some variables
        #Call some methods

class Subclass(Superclass):
    def __init__(self, subclass_arg1, *args, **kwargs):
        super(Subclass, self).__init__(*args, **kwargs)
        #Call a subclass only method

При вызове Subclass(arg1, arg2, arg3) Python просто вызовет Subclass.__init__(<the instance>, arg1, arg2, arg3).Он волшебным образом не попытается сопоставить некоторые аргументы с суперклассом, а некоторые с подклассом.

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