继承

时间:2016-05-16 21:47:22

标签: python python-2.7

我在python中有以下类:

class Foo():
    def __init__(self):
        self.id=8
        self.value=self.get_value() #Mark-1
    def get_value(self):
        pass
    def should_destroy_earth(self):
        return self.id ==42

class Baz(Foo):
    def get_value(self,some_new_parameter):
        pass

在这里,我可以创建一个类 Foo 的对象:

  

ob1 = Foo()#Eccess

但是,如果我尝试创建 Baz 的对象,它会抛出一个错误:

  

Ob2 = Baz()#错误

  File "classesPython.py", line 20, in <module>
    ob2 = Baz()
  File "classesPython.py", line 4, in __init__
    self.value=self.get_value()
TypeError: get_value() takes exactly 2 arguments (1 given)

如果我删除&#34; self.get_value&#34;在 Foo 类的第3行中,我可以创建类 Baz 的对象。

当我们在python中继承一个类时,超类的 init 方法不会被子类继承,并且不存在这种情况。我们需要明确地调用它们(例如Superclass。 init (self))?

因此,当我创建一个Baz对象时,默认情况下不会调用Foo()类的__init__方法。那么为什么我不能为Baz创建对象呢?

2 个答案:

答案 0 :(得分:2)

不,你有一些根本的误解。 __init__的{​​{1}}方法肯定 Foo继承。

Python将假设您希望子类的Baz具有相同的实现,因为您没有实现任何其他内容。如果您不想要这种行为,则必须在__init__中自行明确定义。

答案 1 :(得分:1)

  

当我们在python中继承一个类时,不是这样的情况   超类的方法不是由子类继承的,我们需要   明确地调用它们(例如Superclass.init(self))?

不,只有子类具有__init__方法时才会出现这种情况。