Python中没有构造函数重载-缺点是什么?

Python中没有构造函数重载-缺点是什么?,python,Python,我在浏览DiveIntophon时遇到了这样一个问题: Java和Powerbuilder支持通过参数列表进行函数重载, i、 一个类可以有多个同名的方法,但是 不同数量的参数,或不同类型的参数。其他 语言(尤其是PL/SQL)甚至支持函数重载 参数名;i、 e.一个类可以有多个具有相同属性的方法 名称和相同类型但不同的相同数量的参数 参数名。Python都不支持这两种方法;它没有任何形式的 函数重载。方法仅由其属性定义 名称,并且具有给定名称的每个类只能有一个方法。所以 如果子类具有\uuuu

我在浏览DiveIntophon时遇到了这样一个问题:

Java和Powerbuilder支持通过参数列表进行函数重载, i、 一个类可以有多个同名的方法,但是 不同数量的参数,或不同类型的参数。其他 语言(尤其是PL/SQL)甚至支持函数重载 参数名;i、 e.一个类可以有多个具有相同属性的方法 名称和相同类型但不同的相同数量的参数 参数名。Python都不支持这两种方法;它没有任何形式的 函数重载。方法仅由其属性定义 名称,并且具有给定名称的每个类只能有一个方法。所以 如果子类具有
\uuuu init\uuu
方法,则它总是重写 祖先
\uuuu init\uuuu
方法,即使后代使用 不同的参数列表。同样的规则也适用于任何其他情况 方法

子类的
\uuu init\uuu
方法总是覆盖超类的
\uu init\uu
方法,这难道不是一个主要的缺点吗?因此,如果我在初始化一些变量并调用类
class1
\uuu init\uuu
中的一些函数,那么我将派生一个子类
class2(class1)
,我必须重新初始化所有
class1
的变量并调用
class2
\uu init\ucode>中的那些函数


我很确定我误解了这一切,所以如果有人能澄清这一点,那就太好了。

你是对的,在子类中定义
\uuuuu init\uuuuu
会覆盖超类的
\uu init\uuuuuuu
,但是你总是可以使用
super(CurrentClass,self)。\uu init\uuuuu
从子类调用超类的构造函数。因此,您不必“手动”复制超类的初始化工作


作为旁注,即使Python不支持方法重载,它也支持默认参数(除了通过
*args
**kwargs
的可选参数之外),这意味着您只需在函数/方法实现中接受不同的参数子集,就可以轻松地模拟重载函数的行为

因此,如果我在初始化一些变量并调用类class1的
\uuuuu init\uuuuu
中的一些函数,那么我将派生它的一个子类class2(class1),我必须重新初始化所有class1的变量,并调用类2中的
\uuuu init\uuuuu
中的那些函数


不需要。只需调用超类的
\uuu init\uuu()
,而且,您可以找到如何执行此操作。

如果您使用
*args
/
**kwdargs**
方法对特定函数执行一些分派,那么您会意识到,实际上使用不同的函数名称并没有什么坏处:)@tom当然我这么做了,super是一个新词吗?我正在尝试,因为我在这台机器中没有python,
super
是在Python2.2中添加的(不久前)。您使用的Python版本必须比这个版本旧。@tom
super
在所有情况下都不能工作,它必须是一个新样式的类,这就是我出错的原因<代码>基类。uu初始化(self)
将起作用。测试用例:,,“您只需在函数/方法实现中接受不同的参数子集,就可以轻松地模拟重载函数的行为。”但请对此负责。不要试图将完全不同的函数签名塞进单个函数中。