zoukankan      html  css  js  c++  java
  • 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中的方法,所以可以在实例化对象后,直接使用父类中的方法,以减少代码重写。下面是执行后的结果:

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

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

    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()

     我们看下:如果子类和父类有同样的方法名,那么调用的方法,将是子类内部的方法。而不是调用父类的方法。看清楚  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()

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

     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()函数。因为从左到右继承。

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

     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继承。所以层级不一样,不能同时被继承

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

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

  • 相关阅读:
    bbb SOCKET CAN
    在BBB上使用CCS5开发环境
    BBB的PRU模块
    垃圾邮件分类
    yzoj 2377 颂芬梭哈 题解
    yzoj 2372 小B的数字 题解
    yzoj P2371 爬山 题解
    hdu 1007 Quoit Design 题解
    手写堆
    yzoj P1126 塔 题解
  • 原文地址:https://www.cnblogs.com/woshidaliua/p/11342379.html
Copyright © 2011-2022 走看看