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
    #以每一条路的第一位为头,后面的为尾
    #判断第一条路的头在不在后面的尾里面
    #如果在
    #看另一条路的头在不在
    #如果不在
    #删除每一条路的这个字母
    #添加到另一个列表中
    #依次循环
    #得到的那个新列表前面加上最后的那个子类名
    #就是继承的顺序
     
  • 相关阅读:
    js判断当前年龄
    获取手机号归属地
    关于vscode控制tab控制缩进2/4个空格
    vue中的 mvvm
    关于前端性能优化
    js 深拷贝
    关于js hasOwnPropetry // instanceof 整理
    node-sass 安装报错
    JS发送跨域Post请求出现两次请求的解决办法
    Vue面试复习
  • 原文地址:https://www.cnblogs.com/123zzy/p/9399696.html
Copyright © 2011-2022 走看看