多继承
多继承要注意很多地方,以下代码只是最基本多继承方式,下面会讲到多继承的基本格式和继承方法
简单说明:
1、如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。
2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数。
3、Python 总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去父类中找。)
代码演示:
class Father(object):
# 定义父类的构造方法
def __init__(self, n, a, w):
self.name = n
self.age = a
self.weight = w
def speak(self):
print("%s说,我%d岁,我有%s千克,我打篮球很好,长得也很帅!"
% (self.name, self.age, self.weight))
class Son(Father):
# 定义一个子类的构造函数
def __init__(self, n, a, w, h):
self.high = h
# 覆写父类的方法
def speak(self):
print("%s说,我%d岁,我有%s千克,我打篮球很好,我的弹跳有%s"
% (self.name, self.age, self.weight, self.high))
class Singer():
# 定义另外一个类的构造函数
def __init__(self, n, s):
self.name = n
self.sing = s
# 方法重写
def speak(self):
print("我叫%s,我是一名%s" % (self.name, self.sing))
class Myself(Singer, Son):
# 定义初始化方法
def __init__(self,n,a,w,h,s):
self.name = n
self.age = a
self.weight = w
self.high = h
self.sing = s
def speak(self):
print("我叫%s,我今年%d,我有%d千克,我的弹跳有%s" %
(self.name,self.age,self.weight,self.high))
person = Myself("凌薇",18,60,"1.1米","歌手")
person.speak()
对于初学者,
说明:
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。
这里的继承方式是广度优先算法思想,因为python3中的类统一按广度优先来继承的。
详细请看:深度优先 & 广度优先