继承

继承是一种创建新类的方式,在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. zoj3497 Mistwald(矩阵快速幂)

    题意:给定一个有向图(最多25个节点,每个节点的出度最多为4),给定起点和终点,然后从起点开始走,走到终点就停止,否则一直往下走,问能不能P步到达终点.也就是说从起点出发,走一条长度为P的路径,路径中 ...

  2. python爬虫1——获取网站源代码(豆瓣图书top250信息)

    # -*- coding: utf-8 -*- import requests import re import sys reload(sys) sys.setdefaultencoding('utf ...

  3. absolute

    在需要用到小图标时,可以使用position:absolute,它具有消除float和位置不变特性.使用absolute可以浮现在同级元素的上方.用margin进行精确定位即可,也不必使用top,le ...

  4. 字蛛fontSpider的使用

    字蛛官方文档 http://font-spider.org/index.html 首先安装全局包  npm install font-spider -g 然后下载字体 ,本次需要的是  "造 ...

  5. python3异常处理 try

    一. 简介 在编程过程中为了增加友好性,在程序出现Bug时一般不会直接将错误信息展示给用户,而是提供一个友好的输出提示. 二. 使用 1.异常基础 常用结构: try: pass except Exc ...

  6. 【bzoj4503】 两个串 FFT

    $FFT$套路题(然而我看错题了) 我们考虑化一下式子. 设当前比较的两个部分为$S[i....i+|T|-1]$和$T[0....|T|-1]$. 我们对串$T$中出现问号的位置全部赋值为$0$. ...

  7. A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问

    这是我最近看到的一篇论文,思路还是很清晰的,就是改进的LPA算法.改进的地方在两个方面: (1)结合K-shell算法计算量了节点重重要度NI(node importance),标签更新顺序则按照NI ...

  8. 【.NET 4.5】新增的 Prefer 32-bit target platform

    这本来是一个很小的feature并且也没有什么模糊的地方,关键是VS把这个设置成了默认值,当默认为Any CPU的时候,application会被编译成32-bit mode. 下边是我遇到的问题,在 ...

  9. 使用TopShelf做windows服务安装 ---安装参数解释

    转自:https://topshelf.readthedocs.io/en/latest/overview/commandline.html Topshelf Command-Line Referen ...

  10. js的基础知识笔记

    目录 一.基本数据类型 二.函数 三.面向对象 一.基本数据类型 1.使用var声明变量.使用;结尾.使用{}表示代码块.使用驼峰式命名 2.变量是弱类型的,即并不严格要求声明变量的类型,一个变量可以 ...