12 继承
面向对象三大特征:封装、继承、多态
1.继承
面向对象编程 (OOP) 语言的一个主要功能就是“继承”,所谓继承就是使现有的类无需编码便可以拥有原有类的方法和属性。
被继承的类可以称之为父类、基类、超类。继承的类可以称之为子类、派生类。派生和继承是一体两面,从父类向子类看就是派生,从子类向父类看就是继承。子类和父类的关系可以用“is a”类表示,即子类是父类的一种,是一个更具体、更加强大的父类。python支持单继承和多继承。
继承的优点:
- 可以简化代码,减少冗余度
- 提高了代码的可维护性
- 提高了代码的安全性
1.1 单继承
所谓的单继承就是一个子类只有一个父类。子类会继承父类所有的属性和方法。
- 私有成员在子类中无法直接使用
- 子类对象无法直接使用继承自父类的私有成员
- 子类方法和父类方法重名,通过子类对象调用的是子类方法
#语法:
class 子类名(父类名):
pass
注意:object是Python中所有类的父类【一般情况下,如果一个类没有指明的父类,默认它的父类为object】
-
构造函数的继承
class Animal: def __init__(self,name,age): self.name = name self.__age =age .... class Dog(Animal): def __init__(self,name,age,gender): #调用父类构造方法的好处,简化了子类构造方法代码,实现了代码复用 #1. super(当前类名,self).__init__(实参列表) #实参不要带self # super(Dog,self).__init__(name,age) # 2. super().__init__(实参列表)#实参不要带self # super().__init__(name, age) #3. 父类名.__init__(self,其它参数) Animal.__init__(self,name,age) self.gender = gender ....
-
方法的改写
class Animal: def __sleep(self): print('睡饱饱') def eat(self): print('吃饭饭') def sleeping(self): self.__sleep() .... class Dog(Animal): #改写继承自父类的方法 def eat(self):