Подтвердить что ты не робот

Подкласс - аргументы из суперкласса

Я немного смущен тем, как передаются аргументы между подклассами и суперклассами в 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

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

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

Ответ 1

Там нет волшебства! Методы __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). Он не будет волшебным образом пытаться сопоставить некоторые аргументы суперкласса, а некоторые - с подклассом.