继承

继承是一种创建新类的方式,在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. 为什么子元素设置margin-top会作用在父元素上?

    原因在于:CSS 外边距合并 复现: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  2. position:absolute元素 怎样居中

    <div style = 'height:20px;position:absolute;z-index:9999;top:0;left:0;right:0;margin:auto;'> & ...

  3. SecureCRT连接Ubuntu,centos失败解决

    SecureCRT连接Ubuntu,centos失败,长时间的重新连接,连接不了. Ubuntu,centos默认未安装ssh远程加密连接服务.使用命令,安装即可. 1.sudo apt-get in ...

  4. day 65 crm(2) admin源码解析,以及简单的仿造admin组件

    前情提要: crm中的admin组件重写. 一:admin的autodiscover 作用:实现扫面该项目中的所有的admin 1:执行顺序-> 按照注册的顺序执行 二:单例模式 1:普通案例的 ...

  5. css单行文本及多行文本溢出显示省略号

    关于文本溢出的相关属性: 1. text-overflow: clip|ellipsis|string;   该属性规定当文本溢出包含元素时发生的事情. clip : 修剪文本. ellipsis : ...

  6. 一文详解python的类方法,普通方法和静态方法

    首先形式上的区别,实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls. 静态方法无隐含参数,主要为了类实例也可以直接调用静态方法. 所以逻辑上,类方法被类调用,实例方法被实例调用,静 ...

  7. Qt: QTimer和QThread

    让QTimer 跑在其他线程. 一般写法如下. 1. 在main thread中为worker thread指定定时器. QThread* thread = new QThread(this); th ...

  8. spring boot整合RabbitMQ(Fanout模式)

    1.Fanout Exchange介绍Fanout Exchange 消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略. 如上图所示, ...

  9. [转]RESTful API 设计指南

    转自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机. ...

  10. 【树】Count Complete Tree Nodes

    题目: 求完全二叉树节点数. 思路: 满二叉树的节点数是2^k-1,k是树的深度. 所以我们可以先判断该树是否为满二叉树,然后是的话直接返回结果,如果不是递归地求解子树. 这样不用遍历所有的节点.复杂 ...