【发布时间】:2016-05-16 21:47:22
【问题描述】:
我在 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() # 成功
但是,如果我尝试创建 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)
如果我删除类 Foo 的第 3 行中的“self.get_value”,我可以创建类 Baz 的对象。
不是这样的,当我们在python中继承一个类时,超类的init方法并没有被子类继承,我们需要显式的调用它们(例如 Superclass.init(self) )?
因此,当我创建 Baz 的对象时,默认情况下不会调用 Foo() 类的 __init__ 方法。那么为什么我不能为 Baz 创建对象呢?
【问题讨论】:
-
真正的问题不是
Baz实际上不支持与Foo相同的接口,因此不应该 是它的子类吗?你能举一个不那么抽象的例子吗? -
是的,你是对的,但这更多是为了理解python的惯用方法。
标签: python python-2.7