最近生病了,python更新要结束了,但是这才是真正的开始。因为后面要更新的是UnitTest单元测试框架,以及后续的Requests库。在后续的笔记会补充一些python的其他细节笔记。我想是这样的hhh,开始更新。

接着前面的笔记开始,子类继承父类中的方法,目的是减少代码的重写。我们看下代码:

 class fruit(object):    #定义一个类:水果类
def eat(self):
return '好吃的水果' class apple(fruit): #定义一个苹果类,继承fruit()类
def __init__(self):
pass Apple = apple()
print(Apple.eat()) #子类实例化对象可以直接用继承的父类中的eat()方法,减少代码的重写,提高效率

代码中,我们可以看到,子类apple继承了父类fruit中的方法,所以可以在实例化对象后,直接使用父类中的方法,以减少代码重写。下面是执行后的结果:

有时候,父类的方法我们不能使用,虽然方法是一样的,但是内部的逻辑还是不一样,我们需要子类有自己的特性存在。这时候我们可以在子类中,写同样的方法。需要注意的是,当父类和子类有同样的方法名的时候,调用的是:子类自己内部的方法。

我们看下单个类继承的原则:

1.从上到下:子类继承父类,但是子类没有重写父类方法(没有相同名字的方法),那么实例化后,调用的方法是直接调用父类的方法
2.从下到上:子类继承父类,但是子类重写父类的方法(有相同名字的方法),那么实例化后,调用的方法是子类当中的方法(子类优先考虑自己中的方法)
 class fruit(object):    #定义一个类:水果类
def eat(self): #注意父类和子类都有同一个方法:eat()
print('好吃的水果') class apple(fruit): #定义一个苹果类
def __init__(self,color): #子类中的构造函数
self.color = color #实例属性 def eat(self): #子类实例化对象后,调用子类和父类同时存在的方法,调用的时候,是调用子类自己的方法
print( '苹果{0}的,最好吃'.format(self.color)) Apple = apple('红色')
Apple.eat()

我们看下:如果子类和父类有同样的方法名,那么调用的方法,将是子类内部的方法。而不是调用父类的方法。看清楚  FuShiapple(apple):   它只是继承了一个apple为父类。

 class fruit(object):    #定义一个类:水果类
def eat(self):
print('好吃的水果') class apple(fruit): #定义一个苹果类
def __init__(self,color):
self.color = color def eat(self):
print( '苹果{0}的,最好吃'.format(self.color)) class FuShiapple(apple): #定义一个富士苹果(很有名的苹果牌子) def eat(self):
print('我在春天最好吃,价格最贵') '''这里的'橘红色'参数是因为FuShiapple()继承的父类是apple(),在apple()类里面有构造函数的参数color,所以子类FuShiapple()
在实例化对象初始化的时候,也会对父类进行初始化操作,所以需要有个参数传给父类的color实例属性作为参数初始化''' fushi = FuShiapple('橘红色')
fushi.eat()

接下来我们看下多个类继承的规则:从左到右继承

 class Animal(object):
def eat(self): #有eat()函数
print('动物会吃东西') class Daddy_Dog(Animal):
def eat(self): #有eat()函数
print('喜欢吃肥肉') class Mother_Dog(Animal):
def eat(self): #有eat()函数
print('喜欢吃骨头') class Son_Dog(Mother_Dog,Daddy_Dog): # Son_Dog子类继承了Mother_Dog 和 Daddy_Dog 两个类
pass son = Son_Dog()
son.eat() #调用eat()函数,将会从左到右的顺序去查找eat()函数,所以会调用Mother_Dog这个父类的eat()函数。因为从左到右继承。

多个类继承,需要注意的是,类的层级不一样,所以不能同时继承。(可能这样表达不专业,但是看下代码吧)

 class Animal(object):
def eat(self): #有eat()函数
print('动物会吃东西') class Daddy_Dog(Animal): #继承 Animal 为父类
def eat(self): #有eat()函数
print('喜欢吃肥肉') class Mother_Dog(Animal): #继承 Animal 为父类
def eat(self): #有eat()函数
print('喜欢吃骨头') class Son_Dog(Animal,Daddy_Dog): # Son_Dog子类继承了 Animal 和 Daddy_Dog 两个类
pass son = Son_Dog()
son.eat() #调用eat()函数,将会报异常,因为Animal被 Daddy_Dog这个类继承,Daddy_Dog又被Son_Dog继承。所以层级不一样,不能同时被继承

我们发现代码在执行的时候报异常了。我们的 Daddy_Dog 是 Animal的子类,Son_Dog 是 Daddy_Dog的子类。我们可以说 Animal 是Son_Dog的爷爷类,所以它不能同时继承Daddy_Dog  和 Animal 这样说比较容易理解我所要表达的:不一个层级的类,不能被同时继承。-------------这样表达不是专业的,但是容易理解吧。请大神勿喷,如果有更好的专业的表达请多多指教。

---------------谢谢,来自在学习的小白。  python要了解的部分,目前就这么多。后面开始框架的笔记。

Python基础总结之初步认识---class类的继承(终)。第十六天开始(新手可相互督促)的更多相关文章

  1. Python基础总结之初步认识---class类的继承(下)。第十五天开始(新手可相互督促

    年薪百万的步伐慢了两天hhhh严格意义是三天.最近买了新的玩具,在家玩玩玩!~~~~ 今天开始正式认识类的继承.类的继承是怎么继承呢?看下代码: class Animal(object): #父类 d ...

  2. Python基础总结之初步认识---clsaa类(上)。第十四天开始(新手可相互督促)

    最近的类看着很疼,坚持就是胜利~~~ python中的类,什么是类?类是由属性和方法组成的.类中可能有很多属性,以及方法. 我们这样定义一个类: 前面是class关键字 后面school是一个类的名字 ...

  3. Python基础总结之初步认识---class类(中)。第十四天开始(新手可相互督促)

    昨天简单的认识类怎么定义,什么是类,类如何调用.今天的笔记会大概补充一些内容,明天的笔记会细致讲解,加深个印象即可 今天我们在了解下:类的属性,类属性属于类也属于实例化对象.也就是说类的实例化对象可以 ...

  4. python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  5. Python基础教程学习(四)类的创建与继承

    类中可以有方法,类外也可以有函数,其实类就是一种封装, Python中可以自己定义一个函数,一可以把这个函数在类中封装成一个方法, 其中的属性和方法自然就从父类中继承来了, 要想获得多个类的属性和功能 ...

  6. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  7. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  8. python基础之面向对象编程介绍、类和对象

    面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...

  9. python基础练习题(题目 作用域、类的方法与变量)

    day29 --------------------------------------------------------------- 实例043:作用域.类的方法与变量 题目 模仿静态变量(st ...

随机推荐

  1. Python中文件的读写操作

    文件操作基本流程: 1. 介绍 计算机系统是由计算机硬件,操作系统,和应用程序三部分组成. 内存 存放不持久 硬盘 可以使数据持久化 文件操作  数据持久化的一种 全栈开发  框架类 2. 文件的操作 ...

  2. Java_Set用法总结

    在java语言中,提供多种不同的结构来组织对象,Set(集合)是其中的一种,本身是一个接口,其迭代时的顺序取决于其具体实现. 典型的实现包括: HashSet:哈希表是通过使用称为散列法的机制来存储信 ...

  3. C++学习书籍推荐《C++ Primer 第四版》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer中文版(第4版)>对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使<C++ Primer中文版 ...

  4. 【深入浅出-JVM】(3):浮点数

    -5 浮点数推导 二进制转十进制 1 10000001 01000000000000000000000 1 10000001 101000000000000000000000 如果指数位不全为 0 则 ...

  5. RSYNC部署

    1 rsync简介 1.1 什么是rsync rsync: - a fast, versatile, remote (and local) file-copying toolrsync:是一种快速,多 ...

  6. 探寻 webpack_bundle_analyzer 原理

    webpack_bundle_analyzer 是什么? 这是webpack官方出品的,对项目中模块依赖关系及体积的分析插件,其界面如下: 问题来了,这是如何来进行统计的? 这里提供一个插件的代码,可 ...

  7. MyBatis从入门到精通(十二):使用collection标签实现嵌套查询

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解使用collectio ...

  8. 2019牛客多校第一场A-Equivalent Prefixes

    Equivalent Prefixes 传送门 解题思路 先用单调栈求出两个序列中每一个数左边第一个小于自己的数的下标, 存入a[], b[].然后按照1~n的顺序循环,比较 a[i]和b[i]是否相 ...

  9. 简单分析线程获取ReentrantReadWriteLock 读锁的规则

    1. 问题 最近有同事问了我一个问题,在Java编程中,当有一条线程要获取ReentrantReadWriteLock的读锁,此时已经有其他线程获得了读锁,AQS队列里也有线程在等待写锁.由于读锁是共 ...

  10. 基于ng-zorro的ASP.NET ZERO前端实现

    Abp官方提供的企业版(ASP.NET ZERO)[以下简称Zero]模板中前端使用的是Metronic,本篇博客介绍使用ng-zorro和ng-alain替换官方前端,以及使用官方生成器自动生成代码 ...