最近生病了,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. 在FPS游戏中,玩家对音画同步感知的量化与评估

    前言 在游戏测试中,音画同步测试是个难点(所谓游戏音画同步:游戏中,音效与画面的同步程度),现在一般采用人工主观判断的方式测试,但这会带来2个问题: 无法准确量化,针对同一场景的多次测试结果可能会相反 ...

  2. OCR文字识别笔记总结

    OCR的全称是Optical Character Recognition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别,交通路牌的识别,车牌的自动识别等等.本 ...

  3. fastdfs java client error

    tracker,storage运行正常,利用fdfs_test程序做测试,可以正常上传下载文件. tracker的端口配置 # HTTP port on this tracker server htt ...

  4. C语言字符型数据的ASCII码值为何是负数?

    有如下一段C语言程序: #include "stdio.h" int main(void) { char a = 0xC8; printf ("字符a的ASCII码值的1 ...

  5. MySQL5.7.20源码安装以及pt-query-digest用法示例

    MySQL5.7.20源码安装1.下载解压cd /data/app/mysql5.7wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5 ...

  6. Lucene03--字段属性

    Lucene03--字段属性 1.Field 1.1  Field相当于Javabean的属性. 1.2  不同的Field的构造方法参数不一样: 大多数Field的构造函数有三个参数: a)第一个参 ...

  7. 关于java爬虫以及一些实例

    首先是工具介绍 Jsoup jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法 ...

  8. 多线程与高并发(五)final关键字

    final可以修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,我们先依次学习final的基础用法,然后再研究final关键字在多线程中的语义. 一.变量 变量,可以分为成员变量 ...

  9. 线程锁,threadinglocal,线程池,生产者消费者模型

    1.线程锁 1.锁Lock(只能锁一次) import threading import time v = [] lock = threading.Lock() def func(arg): lock ...

  10. Linux卸载MySql——ubuntu版

    卸载mysql 1)删除mysql的数据文件 sudo rm /var/lib/mysql/ -R 2)删除mqsql的配置文件 sudo rm /etc/mysql/ -R 3)自动卸载mysql的 ...