从超类调用子类的方法

时间:2018-11-30 11:38:31

标签: python

我对Python继承有点陌生。

我希望子类从超类继承,并且我希望超类中的方法调用子类中的方法。

在Ruby中,它可以正常工作:

class A
  def foo
    self.bar
  end
end

class B < A
  def init
    foo
  end

  def bar
    puts "I, Bar"
  end
end

B.new.bar

运行此命令时,正如我预期的那样,我会看到“我,酒吧”。

但是,在Python中,我认为是等效代码的行为却很奇怪:

class A:
    def foo(self):
        self.bar()

class B(A):
    def __init__(self):
        self.foo()

    def bar(self):
        print "I, Bar"

B().bar()

我跑步时看到印有两次 “ I,Bar”。

如何用Python重写Ruby代码?有可能吗?如果可以,我在做什么错了?

1 个答案:

答案 0 :(得分:1)

在Python中,只要在Ruby中创建像__init__之类的对象,通常都会调用initialize方法。因此,请使用其他名称重命名__init__方法。

我认为您在Ruby代码中误输入了init而不是initialize