首页
登录 | 注册

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

 

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

 1 class Animal(object):
 2     def eat(self):              #有eat()函数
 3         print('动物会吃东西')
 4 
 5 class Daddy_Dog(Animal):
 6     def eat(self):              #有eat()函数
 7         print('喜欢吃肥肉')
 8 
 9 class Mother_Dog(Animal):
10     def eat(self):              #有eat()函数
11         print('喜欢吃骨头')
12 
13 class Son_Dog(Mother_Dog,Daddy_Dog):   # Son_Dog子类继承了Mother_Dog 和 Daddy_Dog 两个类
14     pass
15 
16 son = Son_Dog()
17 son.eat()      #调用eat()函数,将会从左到右的顺序去查找eat()函数,所以会调用Mother_Dog这个父类的eat()函数。因为从左到右继承。

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

 

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

 1 class Animal(object):
 2     def eat(self):              #有eat()函数
 3         print('动物会吃东西')
 4 
 5 class Daddy_Dog(Animal):        #继承 Animal 为父类
 6     def eat(self):              #有eat()函数
 7         print('喜欢吃肥肉')
 8 
 9 class Mother_Dog(Animal):       #继承 Animal 为父类
10     def eat(self):              #有eat()函数
11         print('喜欢吃骨头')
12 
13 class Son_Dog(Animal,Daddy_Dog):   # Son_Dog子类继承了 Animal  和  Daddy_Dog 两个类
14     pass
15 
16 son = Son_Dog()
17 son.eat()      #调用eat()函数,将会报异常,因为Animal被 Daddy_Dog这个类继承,Daddy_Dog又被Son_Dog继承。所以层级不一样,不能同时被继承

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

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

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


相关文章

  • 一. 前言 这里记录了我Blog的所有目录结构,有的项是随笔分类项,有的是具体文章,先把目录写好,以后不断往里面装内容,以后方便整理查阅.当然,主页导航栏可以快速索引到下面的具体项目内容.但是,目前有很多板块还没具体内容更新,待后续接触到相 ...
  • 如何零基础开始自学Python编程
    转载——原作者:赛门喵 链接:https://www.zhihu.com/question/29138020/answer/141170242 0. 明确目标 我是真正零基础开始学Python的,从一开始的一窍不通,到3个月后成功搭建了一个 ...
  • 计算机基础 01 计算机基础之编程 02 计算机组成原理 03 计算机操作系统 04 编程语言分类 Python解释器 05 Python和Python解释器 06 执行Python程序的两种方式 07 Python集成开发环境 变量 08 ...
  • python接口自动化(二十一)--unittest简介(详解)
    简介 前边的随笔主要介绍的requests模块的有关知识个内容,接下来看一下python的单元测试框架unittest.熟悉 或者了解java 的小伙伴应该都清楚常见的单元测试框架 Junit 和 TestNG,这个招聘的需求上也是经常见到 ...
  • 定义函数时,默认参数必须指向不变的对象 参数为可变对象时,正常调用的时候,结果没有问题,但是当使用默认参数的时候,结果就会和理想的有差距. In [78]: def add(L=[]): ...: L.append('END') ...: ...
  • Python是什么? Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CPython遵循 G ...

2019 cecdns.com webmaster#cecdns.com
12 q. 0.080 s.
京ICP备10005923号