继承

继承是一种创建新类的方式,在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. (4)Oracle基础--操作表中数据

    · 添加数据 <1> INSERT 语句 ① 向表中所有字段添加值   语法: INSERT INTO table_name (column1,column2...) VALUES(val ...

  2. MyBatis Generator XML 配置

    使用反向生成器可以生成数据库表对应的实体类和mapper映射文件: 以下是具体介绍相应xml文件的配置: 附上一张配置的模板: <?xml version="1.0" enc ...

  3. 《JAVA与模式》之合成模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的: 合成模式属于对象的结构模式,有时又叫做“部分——整体”模式.合成模式将对象组织到树结构中,可以用来描述 ...

  4. OS之内存管理 ---基本的内存管理策略(二)

    分段 基本方法 分段就是基于用户视图的内存管理方案.逻辑地址空间是由一组段构成的,每个段都有名称和长度.地址指定了段名称和段内偏移.因此用户通过两个量来指定地址:段名称和段偏移. 为了简单,进行对段的 ...

  5. python 查找字符串中字母的个数

    2017.6.17 更新:好像知道错在哪里了.以第一个为例,输入应该是“AHHaaBBa”,因为直接输入AHHaaBBa时,系统不知到这是一个变量还是字符串,所以必须输入的时候申明定义.既然这样的话, ...

  6. .Net Core 发布WindowsServices

    项目代码文件夹 执行命令 dotnet publish -c Release -r win-x64

  7. CentOS 安装Scrapy

    本文python版本是python3.5.3,关于升级python和安装pip请到:http://www.cnblogs.com/technologylife/p/6242115.html 安装相关包 ...

  8. hadoop1.x异常

    可能是存在class冲突 http://stackoverflow.com/questions/25130799/hadoop-java-io-ioexception-call-to-localhos ...

  9. pycharm 使用jupyter notebook 报错:'_xsrf' argument missing from POST

    出问题的关键点就在: 我用cmd启动的jupyter notebook,然后用pycham新建了一个jupyter notebook 结果 一直报错'_xsrf' argument missing f ...

  10. mysql 一个表内根据字段对应值不同查询统计总数