我正在通过DiveIntoPython并遇到了这个:
Java和Powerbuilder通过参数列表支持函数重载, 即一个类可以有多个具有相同名称的方法,但是a 不同数量的参数或不同类型的参数。其他 语言(最着名的是PL / SQL)甚至支持函数重载 参数名称;即一个类可以有多个具有相同的方法 名称和相同类型的相同数量的参数但不同 参数名称。 Python不支持这些;它没有任何形式 功能超载无论如何。方法仅由他们定义 name,每个类只能有一个具有给定名称的方法。所以 如果后代类有
__init__
方法,它总是覆盖 祖先__init__
方法,即使后代用a定义它 不同的参数列表。同样的规则适用于任何其他规则 方法
子类的__init__
方法总是覆盖超类的__init__
方法,这不是一个主要的缺点吗?因此,如果我正在初始化一些变量并在类class1
的{{1}}中调用某些函数,那么我派生它的子类__init__
,我必须重新初始化所有{ {1}}变量并在class2(class1)
的{{1}}中调用这些函数?
我很确定我误解了所有这些,所以如果有人澄清这一点会很好。
答案 0 :(得分:14)
你是正确的,在子类中定义__init__
会覆盖超类的__init__
,但你总是可以使用super(CurrentClass, self).__init__
从子类中调用超类的构造函数。因此,您不必“手动”复制超类的初始化工作。
作为旁注,即使Python不支持方法重载,它也支持默认参数(除了通过*args
和**kwargs
的可选参数),这意味着您可以轻松地模拟行为通过在函数/方法实现中接受不同的参数子集来重载函数。
答案 1 :(得分:2)