Должна ли функция __init__ дочернего класса включать все аргументы, используемые в функции __init__ родительского класса? - PullRequest
0 голосов
/ 04 мая 2018

Я определил дочерний класс B, унаследованный от класса A. Я хочу дать только один параметр в функции __init__ класса B. Для функции __init__ класса A требуется четыре аргумента, которые создаются в __init__ Функция А. Мне было интересно, будет ли это работать в Python 3. Мой код будет выглядеть как-то ниже.

class A():
     __init__(self,a1,a2,a3,a4):
          ...
class B(A):
     __init__(self,b):
          ...
          # the arguments a1 a2 a3 a4 for the parent class are generated
          a1 = ...
          a2 = ...
          a3 = ... 
          a4 = ...
          # call the __init__ function of the parent class using super
          super().__init__(a1,a2,a3,a4)

object = B(b0)

Я скопировал и изменил код от другого человека, который вместо этого использовал Python 2. Когда я запустил код в Python 3, я получил следующую ошибку: __init__() отсутствует 4 обязательных позиционных аргумента: «a1», «a2», «a3» и «a4». Мне было интересно, так ли это, потому что я не включил аргументы, необходимые для A, в __init__() из B.

Обновление

Я только что заметил, что была опечатка. Я написал _init_(self, b) (с одним подчеркиванием), где я должен использовать ___init__(self, b) (с двойным подчеркиванием). После исправления этой опечатки ошибка не появилась. Таким образом, ответ на мой вопрос "нет".

1 Ответ

0 голосов
/ 04 мая 2018

В скором времени ответ - нет. Это работает в Python3. Кажется, у вас нет ошибок, кроме SyntaxError. Кроме того, если у вас есть вопросы, предоставьте свой код в виде минимального, полного и проверяемого примера , как в этом примере:

class A:
    def __init__(self, a1, a2, a3, a4):
       pass

class B(A):
    def __init__(self, b):
        super().__init__(1,2,3,4)

A(1,2,3,4)
B(1) # no error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...