zoukankan      html  css  js  c++  java
  • 18 继承,单继承,多继承,新式类,经典类.新式类遵循广度优先. 经典类遵循深度优先.

    主要内容:

    1. 继承的初始

      a: 子类以及子类实例化的对象,可以访问父类的任何方法或变量.

      b:  类名可以访问父类中的所有内容

      c:  子类实例化的对象也可以访问父类的所有内容

    class Animal:
        breath = '呼吸'
        def __init__(self, name, sex, age):
            self.name = name
            self.sex = sex
            self.age = age
        def eat(self):
            print(self)
            print('动物都需要进食....')
    class Person(Animal):  # 括号里面的 父类,基类,超类   括号外面的 子类,派生类.
        pass
    p1 = Person('alex', 'laddyboy', 1000)
    print(p1.__dict__)
    # # 初识继承:
    # # 子类以及子类实例化的对象 可以访问父类的任何方法或变量.
    print(p1.breath)
    # # 类名可以访问父类所有内容
    print(Person.breath)
    Person.eat(111)
    

      d:  只执行父类的方法:子类中不要定义与父类同名的方法,要不然会先执行子类中的方法,父类中的方法不会执行.

      e:  只执行子类的方法:  在子类创建这个方法.

      f :   既要执行子类的方法,又要执行父类的方法:

        1) : 类名.方法名(self,变量)

        2) : super().方法名(变量)       #自动执行父类中的__init__方法   
                                               super()  作用 :  在子类中调用父类的方法.

    class Animal:
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
        def eat(self):
            print('%s要吃....' % self.name)
        def drink(self):
            print('要喝水....')
    class Cat(Animal):
        def miaow(self):
            print('喵喵叫')
    class Bird(Animal):
        def __init__(self,name,age,sex,ring):
            # Animal.__init__(self,name,age,sex)     #类名.方法名(self,变量)
            super().__init__(name,age,sex)           #super(Bird,self)  #自动执行__init__方法
            self.ring = ring
        def sing(self):
            print('鸟会唱歌...')
    b1 = Bird('鹦鹉',23,'公','绿翅膀')
    print(b1.__dict__)
    

      给方法传了一个参数

    class Animal:
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
        def eat(self,a):
            print('%s要吃....%s' % (self.name,a))
        def drink(self):
            print('要喝水....')
    class Cat(Animal):
        def miaow(self):
            print('喵喵叫')
        def eat(self,a):
            super().eat(a)
            print('吃..')
    # 既要执行子类中的吃,又要执行父类中的吃.
    p1 = Cat('花花',2,'母')
    p1.eat('老鼠')    #传了一个值
    

    2.  经典类,新式类

      a:  新式类:凡是继承object类都是新式类;python3  中所有的类都是新式类,因为python3 中默认继承object

      b:  经典类:不继承object类都是经典类

        python2 :既有新式类又有经典类,所有的类都默认不继承object类,所有的类默认都是经典类.

            你可以让其继承object,成为新式类.

      单继承:新式类,经典类查询顺序一样.

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

      多继承:新式类:遵循广度优先.

         经典类:遵循深度优先.

      多继承的新式类:  一条路走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路,如果不能,则走到终点.

      多继承的经典类:  一条路走到黑.

      类名.mro():    查询类的继承顺序.

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

     继承的面试题1:

    class Parent:
        def func(self):
            print('in Parent func')
    
        def __init__(self):
            self.func()
    
    class Son(Parent):
        def func(self):
            print('in Son func')
    
    son1 = Son()          #类名加()实例化一个对象,创建一个son1对象空间,自动执行__init__方法,现在son1对象空间找,如果没有找到,到
                          # 父类中找,找到了,然后执行func函数,现在子类中找,看有没有func函数,如果有就执行,没有去父类中找.                                                  
    

                        

     

  • 相关阅读:
    Codeforces Round #272 (Div. 2) A. Dreamoon and Stairs 水题
    Codeforces Round #368 (Div. 2) E. Garlands 二维树状数组 暴力
    Codeforces Round #368 (Div. 2) D. Persistent Bookcase 离线 暴力
    Codeforces Round #368 (Div. 2) C. Pythagorean Triples 数学
    Codeforces Round #368 (Div. 2) B. Bakery 水题
    Codeforces Round #368 (Div. 2) A. Brain's Photos 水题
    BZOJ 4636: 蒟蒻的数列 分块
    BZOJ 4610: [Wf2016]Ceiling Functi 水题
    设置让TortoiseGit记住账号和密码
    JSON.stringify转换Date不正确的解決方法
  • 原文地址:https://www.cnblogs.com/gyh412724/p/9368505.html
Copyright © 2011-2022 走看看