2013-04-06 98 views
2

有人可以给我解释下面的代码 TickGenerator从Observer的对象和方法继承,为什么我们需要两个observer.init?python基本解释需要

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

调用父类的构造函数的正规途径是使用'超()'内置。 – 2013-04-06 13:00:36

回答

1

如果你不叫观察员。 如下初始化

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

这意味着你覆盖TickGenerator。 init方法和观察者。 init不会被自动调用。

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 2013-04-06 12:36:50

+1

我想OP的问题是为什么他必须根本调用'Observer .__ init __(self)',并且如果他精通父构造函数调用隐式的计算机语言,这是有道理的。 – 2013-04-06 12:38:11