python如果不支持类的继承,那么定义类就没什么意义。
格式如下:
class DerivedClassName(BaseClassName):
DerivedClassName是派生类,或者说是子类,BaseClassName是基类,或者说是父类,
单继承
代码演示:
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):
# 调用父类的构造函数
Father.__init__(self,n,a,w):
self.high = h
# 覆写父类的方法
def speak(self):
print("%s说,我%d岁,我有%s千克,我打篮球很好,我可以跳%s"
% (self.name,self.age,self.weight,self.high))
person = Son("凌薇",18,60,"1.1米")
person.speak()
简单理解:
在子类中定义了子类的构造函数,并且覆写了父类的speak方法,覆写父类方法也可以说成方法重写,意思就是原本在父类中有的方法,在子类中又定义了一遍,重新定义的意义何在,可能父类的方法不能够满足你的需求,这时,你可以在子类中重新定义你的方法。
而且,类继承在实例化的时候调用子类内部的方法,如果有该方法,则子类用自己的,如果没有就去向父类调用该方法,如果父类也没有,那么结果会报错。就比如上面的代码,实例化调用speak方法,子类中有就执行子类的speak方法,没有,则会向父类中找speak方法。
在python中类继承有以下几个特点:
1、如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。
2、在调用基类的方法时,需要加上基类的类名前缀,且需要带上 self 参数变量。区别在于类中调用普通函数时并不需要带上 self 参数。
3、Python 总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去父类中找。)
多继承讲解:多继承