【问题标题】:python basic explanation needed需要python基本解释
【发布时间】:2013-03-28 20:57:48
【问题描述】:

谁能解释一下下面的代码 TickGenerator 继承自 Observer 的对象和方法,为什么我们同时需要observer.init?

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

【问题讨论】:

  • 调用父构造函数的规范方法是使用 super() 内置函数。

标签: python


【解决方案1】:

我猜你来自一种自动调用父类构造函数的语言。

在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)

【讨论】:

  • Observer.__init__(self) 不是对超类构造函数的调用吗?
  • 我猜 OP 的问题是他为什么必须调用 Observer.__init__(self),如果他精通一种计算机语言,其中父构造函数调用是隐式的。
【解决方案2】:

因为程序员除了需要Observer__init__来做 当前班级的 (TickGenerator) __init__ 正在做什么。

This Stackoverflow answer will help you understand more.

【讨论】:

    【解决方案3】:

    如果不调用 Observer.init 如下:

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

    这意味着你重写了 TickGenerator.init 方法并且 Observer.init 不会被自动调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多