Полиморфизм - добавление к существующим методам при их перезаписи - PullRequest
2 голосов
/ 31 января 2010

Я хочу иметь возможность создать подкласс класса и определить __init__, но при этом запустить старый __init__.

Для иллюстрации скажем, у меня есть следующие классы:

class A(object):
    def __init__(self):
        self.var1 = 1

class B(A):
    def __init__(self)
        self.var2 = 2
        doInitForA()

И я хочу иметь возможность сделать это:

instB = B()
print (instB.var1) #1
print (instB.var2) #2

Отредактировано так, как предложил Игнасио Васкес-Абрамс.(Можно ли редактировать без столкновения?)

Ответы [ 5 ]

6 голосов
/ 31 января 2010

заменить

doInitForA()

с

super(b, self).__init__()
3 голосов
/ 31 января 2010

Возможно, вы захотите посмотреть на этот вопрос: Цепные вызовы родительских конструкторов в python , в частности используйте метод super(b, self).__init__().

0 голосов
/ 31 января 2010
class a:
    def __init__(self):
        self.var1 = 1

class b(a):
    def __init__(self)
        self.var2 = 2
        a.__init__(self)

Вы даже можете написать super().__init__(), если используете Python 3.
См. этот вопрос об использовании super().

0 голосов
/ 31 января 2010

Позвони в твой отец изнутри: a.__init__(self). Обратите внимание, что вам нужно передать self в качестве первого параметра. Если родительский c'or принимает больше параметров, передайте их после self.

0 голосов
/ 31 января 2010

Либо позвоните a.__init__(self), либо получите a из object и используйте super().

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