国产99视频精品免视看6

    1. <em id="yud1w"><acronym id="yud1w"><u id="yud1w"></u></acronym></em>
      
      
      <button id="yud1w"></button>

      python

      当前位置:首页?>?python面向对象?>?当前文章

      python面向对象

      类的继承,super()、多继承广度优先与深度优先及C3算法

      2020-08-02 187赞 python中国网
      每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

        继承是一个概念而已,个人觉得继承是一种编程的方法,是人类"懒惰"的体现。

        官方点说:

        1)继承是面向对象当中的一个概念。如果一个类A“继承自”另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”或者说“B是A的超类”。继承可以使得子类具有父类的属性和方法,避免再次编写相同的代码。

        2)在子类继承父类时,可以重新定义某些属性,重写某些方法,(即覆盖父类原有属性和方法,获得与父类别不同的功能)。也可以为子类追加新的属性和方法。

        3)通常静态的面向对象编程语言,继承属于静态的,(即在子类别的行为在编译期就已经决定,无法在执行期扩充)。

        继承的分类

        1、单继承:一个类只有一个父类

        2、多继承:一个类有多个父类。多继承比较复杂,可能多个父类出现相同的方法,甚至父类还继承了父类等。

        本节课先说简单的单继承。多继承参照python多继承父类同名处理python多继承C3算法

        下面例子中Girls是被继承的类叫做父类,基类,超类。America、Japan、People叫做子类,派生类。

      # -*- coding: utf-8 -*-
      
      
      class Girls:
          def __init__(self,name,age):
              self.name = name
              self.age = age
      
      
      class America(Girls):
          def yue_pao(self):
              print("America  {0} 被约...".format(self.name))
      
      
      class Japan(Girls):
          def yue_pao(self):
              print("Japan {0} 被约...".format(self.name))
      
      
      class People(Girls):
          def yue_pao(self):
              print("{0} is 约炮...".format(self.name))
      
      
      if __name__ == "__main__":
          person = People("laowang", 25)
          america = America("老美", 20)
          japan = Japan("日韩", 18)
          person.yue_pao()
          america.yue_pao()
          japan.yue_pao()
      
      
      laowang is 约炮...
      America  老美 被约...
      Japan 日韩 被约...
      

         继承的使用场景

        如果定义了好几个类,类中都有着相同的成员属性或成员方法,这个时候就可以把这些类的共有特征抽取出来,形成一个父类, 用以被继承。

         从使用场景上可以看出继承优点:

        1,增加了类的耦合性。

        2,减少了重复代码。

        3,代码书写更加规范合理。

        继承父类的方法&重构

      # -*- coding: utf-8 -*-
      
      
      class Girls:
          def __init__(self,name,age):
              self.name = name
              self.age = age
      
          def say(self):
              print('laowang才能约')
      
      
      class America(Girls):
          def yue_pao(self):
              print("America  {0} 被约...".format(self.name))
      
      
      class Japan(Girls):
          def yue_pao(self):
              print("Japan {0} 被约...".format(self.name))
              
          # 重写父类方法
          def say(self):
              print('{} 任何人都能约'.format(self.name))
      
      
      if __name__ == "__main__":
          japan = Japan("日韩", 18)
          japan.yue_pao()
          japan.say()
      
      
      Japan 日韩 被约...
      日韩 任何人都能约
      

        同时执行子类&父类的构造方法

        如果子类的init方法中想执行父类的init方法并且在此基础上做一些扩充,比如增加一些其他的属性。一般有2种方法

        1)在子类的构造方法中写上父类名.__init__(子类对象,其他参数)

      # -*- coding: utf-8 -*-
      
      
      class Animal:
          def __init__(self,name,age):
              self.name = name
              self.age = age
      
          def say(self):
              print("我是一只{0}我{1}岁了...".format(self.name,self.age))
      
      
      class Cat(Animal):
          def __init__(self,name,age,sex):
              Animal.__init__(self,name,age) # 先执行父类方法
              self.sex = sex  # 再加上子类的属性
              print("初始化了一个猫叫{0}".format(self.name))
      
          def say(self,food):
              print("{0}喜欢吃{1}..".format(self.name,food))
      
      
      if __name__ == "__main__":
          cat = Cat('laowang', 25, '雄性')
          print('子类猫的性别',cat.sex)
          cat.say('老鼠')
      
      
      初始化了一个猫叫laowang
      子类猫的性别 雄性
      laowang喜欢吃老鼠..
      
      

        2)利用super实现,形如super().__func__(参数)

        super并不是一个函数,而是一个类名,形如super(类名, self)事实上调用了super类的初始化函数,产生了一个super对象。现阶段不用深入研究,学会使用即可,注意看下面的写法。

      # -*- coding: utf-8 -*-
      
      
      class Animal:
          def __init__(self,name,age):
              self.name = name
              self.age = age
      
          def say(self):
              print("我是一只{0}我{1}岁了...".format(self.name,self.age))
      
      
      class Cat(Animal):
          def __init__(self,name,age,sex):
              # super(Cat, self).__init__(name, age) # 和下面写法效果一样,但是下面写法更常见
              super().__init__(name, age)
              self.sex = sex  # 加上子类的属性
              print("初始化了一个猫叫{0} 是{1}".format(self.name,self.sex))
      
          def say(self,food):
              print("{0}喜欢吃{1}..".format(self.name,food))
      
      
      if __name__ == "__main__":
          cat = Cat('laowang', 25, '雄性')
          print(cat.name)
      
      
      初始化了一个猫叫laowang 是雄性
      laowang
      
      
      

        

      文章评论

      类的继承,super()、多继承广度优先与深度优先及C3算法文章写得不错,值得赞赏
      国产99视频精品免视看6