我在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创建对象呢?
答案 0 :(得分:2)
不,你有一些根本的误解。 __init__
的{{1}}方法肯定 由Foo
继承。
Python将假设您希望子类的Baz
具有相同的实现,因为您没有实现任何其他内容。如果您不想要这种行为,则必须在__init__
中自行明确定义。
答案 1 :(得分:1)
当我们在python中继承一个类时,不是这样的情况 超类的方法不是由子类继承的,我们需要 明确地调用它们(例如Superclass.init(self))?
不,只有子类具有__init__
方法时才会出现这种情况。