你的例子是错误的,python不支持函数重载。后定义的函数会直接覆盖之前定义的同名函数。
想要实现类似你例子的效果,应该这样:
class MyClass(BaseClassA, BaseClassB):
def __init__(self, x=0, y=0):
self.x = x
self.y = y
写例子前最好先自己实验一把。
Qiangning Hong 说得对,python是不支持函数重载的,而且它的Function Programming也一般,不是很强大。
To All: 不好意思,文中的代码确实是错的。感觉很惭愧,我尝试了两种形式的构造函数,却忘记了Python不支持函数重载的特性。 What a shame!
谢谢Qiangning Hong的指正,非常感谢! 我以后会更加细心严谨的,trust me。
__init__不是构造函数,,但是其功能与构造函数相似,,姑且认为是Python里的构造函数.一般的构造函数是对象还没有构造出来时调用它,但是在python里确是对象构造好后才调用它.
"""
__init__不是构造函数,,但是其功能与构造函数相似,,姑且认为是Python里的构造函数.一般的构造函数是对象还没有构造出来时调用它,但是在python里确是对象构造好后才调用它.
"""
非也非也,不错, __init__ 确实是在对象构造完成后调用它来进行初始化的,不过哪个面向对象的语言不是如此呢?难道你可以在 java 或 c# 的构造函数中控制对象构建过程的细节?呵呵。
事实上,__init__ 方法被调用前,会先调用 class 的方法 __new__,由它返回该 class 的实例,然后调用该实例的 __init__ 方法。
也就是说,假设有如下的 class:
class Temp(object):
def __init__(self, a):
self.a = a
那么 obj = Temp(1) 其实等价于:
obj = Temp.__new__(Temp)
obj.__init(1)
__new__ 方法如果没有被重载最终还是调用到 type.__new__