Python面向对象三要素-继承(Inheritance)
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.继承概述
1>.基本概念
前面我们学习了Python的面向对象三要素之一,封装。今天我们来学习一下继承(Inheritance)
人类和猫类都继承自动物类。
个体继承自父类,继承了父类的一部分特征,但也可以有自己的个性。
再面向对象的世界中,从父类继承,就可以直接拥有父类的属性方法,这样可以减少代码,多复用。子类可以定义自己的属性和方法。
2>.看一个不用继承的例子
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 7 class Animal: 8 def shout(self): 9 print("Animal shouts") 10 11 12 class Cat: 13 def shout(self): 14 print("Cat shouts") 15 16 17 a = Animal() 18 a.shout() 19 20 c = Cat() 21 c.shout() 22 23 24 25 #以上代码执行结果如下: 26 Animal shouts 27 Cat shouts
3>. 使用继承的方式改良上一个不用继承的案例
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 7 class Animal: 8 def __init__(self,name): 9 self._name = name 10 11 def shout(self): #定义一个通用的吃方法 12 print("{} shouts".format(self.__class__.__name__)) 13 14 @property 15 def name(self): 16 return self._name 17 18 class Cat(Animal): 19 pass 20 21 class Dog(Animal): 22 pass 23 24 a = Animal("monster") 25 a.shout() 26 27 cat = Cat("Kitty") 28 cat.shout() 29 print(cat.name) 30 31 dog = Dog("二哈") 32 dog.shout() 33 print(dog.name) 34 35 36 #以上代码执行结果如下: 37 Animal shouts 38 Cat shouts 39 Kitty 40 Dog shouts 41 二哈
4>.总结
通过上例可以看出,通过继承,猫类,狗类不用写代码,直接继承了父类的属性和方法。
继承:
class Cat(Animal)这种形式就是从父类继承,括号中写上继承的类的列表。
继承可以让子类从父类获取特征(属性和方法)
父类:
calss Animal就是Cat和Dog的父类,也称为基类,超类。
子类:
Cat就是Animal的子类,也成为派生类。
二.继承定义
1>.继承使用格式
通过上面的案例,相比大家也可以总结出来继承的使用格式:
class 子类名(基类1[,基类2,...])
和C++一样,Python也支持多继承,继承也可以多级。
2>.在Python3中,object类是所有对象的根基类
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 7 class A: 8 pass 9 10 #如果类定义时,没有基类列表,等同于继承自object。 11 class A(object): 12 pass 13 14 15 """ 16 注意,上例在Python2中,两种写法时不同的。 17 Python支持多继承,继承也可以多级。 18 """
3>.查看继承的特殊属性和方法
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 7 class A: 8 pass 9 10 print(A.__base__) #类的基类。 11 print(A.__bases__) #类的基类元组。 12 print(A.__mro__) #显示方法查找顺序,基类的元组。 13 print(A.mro()) #同上,返回列表。 14 print(A.__subclasses__()) #类的子类列表。 15 16 17 18 #以上代码执行结果如下: 19 <class 'object'> 20 (<class 'object'>,) 21 (<class '__main__.A'>, <class 'object'>) 22 [<class '__main__.A'>, <class 'object'>] 23 []
三.继承中的访问控制
四.方法的重写,覆盖override
五.继承时使用初始化