继承中的python类对象创建

Python class object creation in inheritance

我在python中有以下类:

1
2
3
4
5
6
7
8
9
10
11
12
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() # Success

但是,如果我尝试创建baz对象,它会给我一个错误:

Ob2 = Baz() # Error

1
2
3
4
5
  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)

如果我移除类foo的第三行中的"self.get_value",我就可以创建一个类baz的对象。

当我们继承python中的类时,超类的init方法不是由子类继承的,我们需要显式地调用它们(例如superclass.init(self))不是这样吗?

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


不,你有一些基本的误解。Foo__init__方法当然是由Baz继承的。

python将假定您希望对子类使用相同的__init__实现,因为您没有实现其他任何东西。如果你不想这样做,你必须在Baz中明确定义它。


Isn't is the case that when we inherit a class in python, the init
method of the superclass isn't inherited by the subclass and we need
to explicitly call them (e.g. Superclass.init(self) )?

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