zoukankan      html  css  js  c++  java
  • 类的继承

    继承的优点:
    1,节省代码.
    2,规范代码.
    初识继承:

    #执行方法的时候先在自己的类中找,没有再去父类中找
    只执行本类的方法 #在本类中要有执行的方法
    只执行父类的方法. #本类中不写这个方法,自动去找父类中的方法
    既执行本类又执行父类的方法
      1,父类名.方法名(参数)
      2,super().方法名(参数(self自动传值,不用写self))

    举例:

    class Animal:
    
        def __init__(self, name, sex, age):
            self.name = name
            self.sex = sex
            self.age = age
    
        def eat(self,a1):
            print('%s吃%s' % (self.name,a1))
    
        def drink(self):
            print('%s喝东西' % (self.name))
    
    
    class Cat(Animal):
    
        def miaow(self):
            print('喵喵叫')
        # def eat(self):  # 只执行自己类中的方法
        #     print(666)
    
    class Brid(Animal):
    
        def __init__(self, name,sex,age,wing): # self b1对象 name '鹦鹉',sex '公',age 20,  wing '绿翅膀'
            '''
            self=b1对象
            name='鹦鹉'
            sex='公'
            age= 20,
            wing='绿翅膀'
            '''
        #1,  Animal.__init__(self, name, sex, age)
        #2,  super().__init__(name,sex,age)  #  相当于super(Brid,self).__init__(name,sex,age)
            self.wing = wing
        def bark (self):
            print('嗷嗷叫')
    
        def eat(self,argv):
            super().eat(argv)
            print('鸟吃虫子...')
    
    class Chook(Animal):
        def crow(self):
            print('大爷laiwanya')
    cat1 = Cat('tom','公', 3)
    cat1.eat()
    # 只执行父类的方法:子类中不要定义与父类同名的方法
    # 只执行子类的方法:在子类创建这个方法.
    # 既要执行子类的方法,又要执行父类的方法?
    # 有两种解决方法.
        # 1,Animal.__init__(self, name, sex, age)
        # 1,super().__init__(name,sex,age)
    # cat1 = Cat('tom','公', 3,)
    
    b1 = Brid('鹦鹉','公',20,'绿翅膀')
    # print(b1.__dict__)
    b1.eat('金蝉')
    

    单继承,多继承.
    类:新式类,经典类.

    单继承;
    新式类经典类一样.

    class A:
        pass
        # def func(self):
        #     print('IN A')
    
    class B(A):
        pass
        # def func(self):
        #     print('IN B')
    
    class C(B):
        pass
        # def func(self):
        #     print('IN C')
    
    c1 = C()
    c1.func()
    

      


    多继承:       #python3中没有经典类,都是新式类,自动继承object类.
    新式类:广度优先     类名.mro()#查询类的继承顺序
    经典类:深度优先.     #python2中才有经典类,继承object类之后就是新式类

    class A:
        def func(self):
            print('IN A')
    class B(A):
        pass
        # def func(self):
        #     print('IN B')
    class C(A):
        pass
        # def func(self):
        #     print('IN C')
    class D(B):
        pass
        # def func(self):
        #     print('IN D')
    class E(C):
        pass
        # def func(self):
        #     print('IN E')
    class F(D,E):
        pass
        # def func(self):
        #     print('IN F')
    f1 = F()
    f1.func()
    print(F.mro())  # 查询类的继承顺序
    
    #F,D,B,E,C,A
    #先写出所有路的继承顺序,D,B,A    E,C,A在写出继承的顺序D,E
    #以每一条路的第一位为头,后面的为尾
    #判断第一条路的头在不在后面的尾里面
    #如果在
    #看另一条路的头在不在
    #如果不在
    #删除每一条路的这个字母
    #添加到另一个列表中
    #依次循环
    #得到的那个新列表前面加上最后的那个子类名
    #就是继承的顺序
    

      

      

  • 相关阅读:
    第二阶段站立会议05
    第二阶段站立会议04
    第一阶段冲刺总结
    站立会议08
    站立会议07
    站立会议06
    站立会议05
    站立会议04
    第一次冲刺第3天
    站立会议2
  • 原文地址:https://www.cnblogs.com/duanpengpeng/p/9367996.html
Copyright © 2011-2022 走看看