zoukankan      html  css  js  c++  java
  • day25

     今日内容:

         1.什么是继承?

             在python中继承的特点?单继承&多继承

              python2与python3在继承上的区别

    2. 为何继承?

    3. 如何继承

       先抽象再继承

    4.属性查找的顺序

    5. 派生?

         在子类派生出的新属性中如何重用父类功能的两种方式

    6.  组合

    " " "

    1.什么说继承?

       在程序中继承是一种新建类的方式,新创建的类称之为子类派生类,被继承的类称之为父类基类超类

       继承描述的是一种遗传关系,子类可以重用父类的属性

    2, 为何用继承?

       减少类与类之间代码沉余的问题

    3. 如何继承

      先抽象再继承

     " " "

    在python中继承的特点?单继承&多继承

     class parent1(object):
    
     pass
    
    
    
     class Sub1(parent1):
    
      pass
    
    
    
     class sub2(parent,parent2):
    
           pass
    
     
    
      print(Sub1._bases_)
    
      print(Sub2._bases_)
    
    
    
     print(parent1._bases_)
    
     print(parent2._bases_)
    
     
    
     x=2
    
     class Foo:
    
         # x=1
    
             pass
    
     obj=Foo()
    
     obj.x=3
    
     print(obj.x)

     python2与python3在继承上的区别

     新式类:但凡继承object类的子类,以及该子类的子子类,.....都称之为新式类

    经典类:没有继承object类的子类,以及该子类的子子类,......都称之为经典类

     只有在python2中才区分新式类与经典类

     新式与经典在属性查找上的区别???

     在子类派生的新功能中如何重用父类的功能:

     方式一:指名道姓地访问某一个类中的函数,与继承无关

    class 0ldboypeople:
    
        school = 'oldboy'
    
        def_init_(self,name,age,gender):
    
            self.name = name
    
             self.age = age
    
             self.gendef = gender
    
     
     def choose_course(self):
    
           print('%s is choosing course'%self.name)
    
     
    class Oldboy Teacher(Oldboypeople):
    
              tea, 'egon',18,'male',10,3000
    
         def_init_(self,name,age gender,level,salary):
    
                   self.name = name
    
                    self.age = age
    
                    self.gender = geder
    
    Oldboypeople._init_(self,name,age,gender)

        

    self,level=level
    
          self,salary=salary
     def score(self,stu,nam):
    
              stu.num=num
    
              print('老师'%s‘给学生’%s‘打分’%s’%(self.name,stu.name,num))
    
     
    
      stu = Oldboystdent('kevin',38',male') #_init_(stu1,'kevin,'38,'male')
    
    print(stu._dict_)
    
    tea=,;egon',18,'male',10,3000)
    
    print(stu._dict_)
    
     print(stu.school)
    
    print(tea.school)  

       在单继承背景下,无论是新式类还是经典类属性查找顺序都一样

     先obj->类->父类->....

    class foo:
    
      def f1(self):
    
        print('Foo.f1')
    
        def f2(self):
    
        print('Fpp.f2')
    
        self,f1() #obj.f1()
    
     
    
     class Bar(Foo):
    
        def f1 (self):
    
               print('Bar.f1)
    
    
    
     obj=Bar()
    
     obj.f2()
    
     

    在多类背景下,如果一个子类继承了多个分只,但是多个分只没有汇聚到一个非object类,无论是新式类还是经典类属性查找顺序都一样:

     会按照从左到右的顺序一个分只一个分只的查找下去

    class E:
    
           xxx='E'
    
            pass
    
     
    
    class F:
    
      xxx='F'
    
        pass
    
     
    
    class B(E):
    
              xxx='B'
    
                 pass
    
    class C(F):
    
             xxx='C'
    
               pass
    
    class D:
    
         xxx='D'
    
            pass
    
    class A(B,C,D):
    
                xxx='A'
    
                   pass
    
     
    
     obj A=()
    
     obj.xxx=111
    
     print(obj.xxx)
    
     
    
    print(A.mro())
    
     

     在多继承背景下,如果一个子类继承多了多个分只,但是多个分只最终汇聚到一个非object类

     新式类:广度优先查找:->A->B->C->E->C->F->D->G->0bject

    经典类: 深度优先找查找:obj->A->B->E->G->C->F->D

     class G:
    
        xxx='G'
    
       class E(G):
    
         pass
    
    
    
      class F(G):
    
        xxx='E'
    
            passs
    
    
    
     class B(G)
    
         XXX='F'
    
          pass
    
    
    
     class B (E)
    
       XXX='B'
    
         pass
    
    
    
     class b(E):
    
           xxx='B'
    
          pass
    
    
    
     class C(F):
    
         xxx='C'
    
        pass
    
    
    
    class D(G):
    
        xxx='D'
    
       pass
    
    
    
    class A(B,C,D):
    
         xxx='A'
    
         pass
    
    
    
    
    
      print(A.mro())

      在子类派生出的新功能中如何重用父类的功能:

     方式一:指名道姓地访问某一个类中的函数,与继承无关

     方式二:super(Oldboy Teacher,self),在python3中uper可以不传参数,调用该函数会得到一个特殊对象,该对象是专门用来访问父类中属性,、

    调用:super 会严格参照类的mro列表依次查找属性
    
     class OldboyTeacer(Oldboypeople):
    
        tae,'egon',18'male',10,3000
    
      def _init_(self,name,age,gender)
    
        Oldboypeople._init_(self,name,)
    
            super(OldboyTeacher,self)._init_(name,age,gender)
    
    
    
        self.leve=level
    
       self.salary=salary
    
    
    
      def score(self,stu,num);
    
         stu.num=num
    
          print(‘老师%给学生%s’%(self.name.stu,name,num))
    
    
    
     tea=OldboyTeacher('egon',18,'male',10,3000)#_init__
    
    (tea,'egon',18',male',103000)
    
     print(tea._dict_)
    
     print(stu.school)
    
     
    
     A没有继承B,
    
    class A:
    
         def test(self):
    
             print('A.test')
    
             super().test()
    
    class B:
    
       def test(self):
    
           print('from B')
    
    class C(A,B):
    
             pass
    
     
    
    c=C()
    
    c.test()
    
    print(C.mro())
    
     
  • 相关阅读:
    数据库索引(Oracle和Mysql)学习总结
    个人开源Git地址
    关于SQL优化这些你了解吗?
    Java项目排查cpu负载高
    Java Bean与Map之间相互转化的实现
    Maven项目改为spring boot项目的方法
    spring boot从redis取缓存发生java.lang.ClassCastException异常
    MySQL优化之Explain命令解读
    阿里巴巴校招四面经验分享
    HDBS之应用代码优化
  • 原文地址:https://www.cnblogs.com/hui2002/p/9838697.html
Copyright © 2011-2022 走看看