Python面向对象三要素-继承(Inheritance)

           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

 

五.继承时使用初始化

 

转载于:https://www.cnblogs.com/yinzhengjie/p/11173836.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值