Подкласс - аргументы из суперкласса
Я немного смущен тем, как передаются аргументы между подклассами и суперклассами в 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)
Ответы
Ответ 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)
. Он не будет волшебным образом пытаться сопоставить некоторые аргументы суперкласса, а некоторые - с подклассом.