2013-04-06 4 views
2

Может кто-нибудь, пожалуйста, объясните мне следующий код TickGenerator наследует от объекта и методы Observer, зачем нам нужны оба observer.init?python Необходимое базовое объяснение

class TickGenerator(Observer): 
    def __init__(self): 
     Observer.__init__(self) 
     self.price = 1000 
+0

канонический способ вызвать родительский конструктор использует 'супер()' встроенные. –

ответ

1

Если вы не вызываете наблюдателя. инициализации, как показано ниже:

class TickGenerator(Observer): 
    def __init__(self): 
     self.price = 1000 

Это означает, что вы переопределить TickGenerator. init метод и наблюдатель. init не будет называться automaticlly.

5

Я думаю, вы пришли с языка, на котором автоматически вызывается конструктор родительского класса.

В Python, если вы переопределите метод __init__, конструктор родительского класса не будет вызываться, если вы его не вызвали явно.

До Python 3, это имело обыкновение называться как:

def __init__(self, *args, **kwargs): 
    super(TickGenerator, self).__init__(*args, **kwargs) 

Новый [super()][1] синтаксис (PEP-3135) просто:

def __init__(self, *args, **kwargs): 
    super().method(*args, **kwargs) 
+0

'Observer .__ init __ (self)' это не вызов конструктора суперкласса? – 0x90

+1

Я думаю, что вопрос OP - это то, почему он вообще должен называть 'Observer .__ init __ (self)', и имеет смысл, если он разбирается на компьютерном языке, где вызов родительского конструктора является неявным. –

Смежные вопросы