继承

继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,

父类又可称为基类或超类,新建的类称为派生类或子类

python中类的继承分为:单继承和多继承

 class FatherClass1:    #定义父类1
     pass

 class FatherClass2:    #定义父类2
     pass

 class SonClass(FatherClass1):   #单继承
     pass

 class SonClass(FatherClass1,FatherClass2):  #多继承
     pass

查看继承

 >>> SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类
 (<class '__main__.ParentClass1'>,)
 >>> SubClass2.__bases__
 (<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

提示:如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。

继承的优点:

a,提高了代码的复用性  b:提高了代码的维护性  c:让类与类之间产生了关系,是多态的前提

继承使用方法:

# 只执行父类的方法: ----------------------子类中不要定义与父类同名的方法
# 只执行子类的方法: ----------------------在子类创建这个方法.
# 既要执行子类的方法, 又要执行父类的方法:-----super().

 #  写三个类: 狗,猫,鸡, 每个类中都有 吃 喝  自己的方法  最后定义一个Animal类,

 class Animal:

     def __init__(self, name, sex, age):
         self.name = name
         self.sex = sex
         self.age = age

     def eat(self,a1):
         print('%s吃%s' % (self.name,a1))

     def drink(self):
         print('%s喝东西' % (self.name))

 class Cat(Animal):

     def miaow(self):
         print('喵喵叫')
     # def eat(self):  # 只执行自己类中的方法
     #     print(666)

 class Brid(Animal):

     def __init__(self, name,sex,age,wing): # self b1对象 name '鹦鹉',sex '公',age 20,  wing '绿翅膀'
         '''
         self=b1对象
         name='鹦鹉'
         sex='公'
         age= 20,
         wing='绿翅膀'
         '''
         # Animal.__init__(self, name, sex, age)
         super().__init__(name,sex,age)  #  super(Brid,self).__init__(name,sex,age)
         self.wing = wing
     def bark (self):
         print('嗷嗷叫')

     def eat(self,argv):
         super().eat(argv)
         print('鸟吃虫子...')

 class Chook(Animal):
     def crow(self):
         print('大爷laiwanya')
 # cat1 = Cat('tom','公', 3)
 # # cat1.eat()
 # 只执行父类的方法:子类中不要定义与父类同名的方法
 # 只执行子类的方法:在子类创建这个方法.
 # 既要执行子类的方法,又要执行父类的方法?
 # 有两种解决方法.
     # 1,Animal.__init__(self, name, sex, age)
     # 1,super().__init__(name,sex,age)
 # cat1 = Cat('tom','公', 3,)

 b1 = Brid('鹦鹉','公',20,'绿翅膀')
 # print(b1.__dict__)
 b1.eat('金蝉')

多继承寻找方法:

经典类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错

新式类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错

注意:在上述查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了

1、Python的类可以继承多个类,Java和C#中则只能继承一个类

2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先广度优先

  • 当类是经典类时,多继承情况下,会按照深度优先方式查找

  • 当类是新式类时,多继承情况下,会按照广度优先方式查找

经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

 

 class D:

     def bar(self):
         print 'D.bar'

 class C(D):

     def bar(self):
         print 'C.bar'

 class B(D):

     def bar(self):
         print 'B.bar'

 class A(B, C):

     def bar(self):
         print 'A.bar'

 a = A()
 # 执行bar方法时
 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
 # 所以,查找顺序:A --> B --> D --> C
 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
 a.bar()

 经典类多继承

 经典类多继承
 class D(object):

     def bar(self):
         print 'D.bar'

 class C(D):

     def bar(self):
         print 'C.bar'

 class B(D):

     def bar(self):
         print 'B.bar'

 class A(B, C):

     def bar(self):
         print 'A.bar'

 a = A()
 # 执行bar方法时
 # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
 # 所以,查找顺序:A --> B --> C --> D
 # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
 a.bar()

 新式类多继承

 新式类多继承

【学习笔记】--- 老男孩学Python,day18 面向对象------继承的更多相关文章

  1. Net基础篇_学习笔记_第十二天_面向对象继承(父类和子类)

    继承 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类.Student.Teacher.Driver 子类  派生类Person         ...

  2. Net基础篇_学习笔记_第十二天_面向对象继承(命名空间 、值类型和引用类型)

    命名空间可以认为类是属于命名空间的. 解决类的重名问题,可以看做类的“文件夹”如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间.1).用鼠标去点2).alt+shift+F ...

  3. Net基础篇_学习笔记_第十二天_面向对象继承(字符串_字符串的各种方法)

    我们可以讲字符串看做是char类型的一个只读数组.ToCharArray();将字符串转换为char数组new string(char[] chs):能够将char数组转换为字符串 1).Length ...

  4. Flutter学习笔记(8)--Dart面向对象

    如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...

  5. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  6. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  7. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  8. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  9. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  10. Python之面向对象继承和派生

    Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...

随机推荐

  1. 五,session数据写入memcached

    1,session数据通常保存在服务器端的文件中,它的默认过期时间是1440s.我们可以将session数据保存到memcached中,设定memcached的过期时间大于session过期时间即可. ...

  2. 关于使用Iscroll.js异步加载数据后不能滑动到最底端的问题解决方案

    关于使用Iscroll.js异步加载数据后不能滑动到最底端,拉到最下边又弹回去的问题困扰了我老半天,相信很多朋友都遇到了.我刚好不小心解决了,和大家分享一下.由于各种忙,下边就直接上代码吧. (前提是 ...

  3. canvas 绘制圆形进度条

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. servlet中request和response

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  5. leetcode-917-仅仅反转字母

    题目描述: 给定一个字符串 S,返回 “反转后的” 字符串,其中不是字母的字符都保留在原地,而所有字母的位置发生反转. 示例 1: 输入:"ab-cd" 输出:"dc-b ...

  6. javaWeb知识点学习(一)

    1.静态页面的传递过程 在静态WEB程序中,客户端使用WEB浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在需 ...

  7. 02--STL算法(函数对象和谓词)

    一:函数对象(仿函数):实现状态记录等其他操作<相对于普通函数> 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象. 即是重载了“ ...

  8. (转)AWK函数

    http://wiki.jikexueyuan.com/project/awk/built-in-functions.html-------内置函数 http://wiki.jikexueyuan.c ...

  9. 快捷键&小技巧

    shift+鼠标滚轮:实现左右移动 alt+鼠标左键双击:打开属性 chrome中在F12下的Element中,可以先选中某一项,可以直接按住F2进行编辑 chrome中element的右下方我们可以 ...

  10. 【Spring】Spring MVC文件上传--整合bootstrap-fileinput和jQuery-File-Upload

    前言 这里分享两个使用Spring MVC进行文件上传的简单示例, 分别整合bootstrap-fileinput 和 Jquery File Upload , 代码十分简单, 都是入门的示例,因此这 ...