zoukankan      html  css  js  c++  java
  • python全栈开发-面向对象-进阶

    python_day_18

    1,面向对象的三大特性是什么?
    继承,多态,封装
    2,什么是面向对象的新式类?什么是经典类?
    凡是继承object类都是新式类.
    凡是不继承object类都是经典类.
    3,面向对象为什么要有继承?继承的好处是什么?
    因为继承可以访问父类的任何方法或变量.
    好处:a,提高了代码的复用性 b:提高了代码的维护性 c:让类与类之间产生了关系,是多态的前提
    4,面向对象的广度优先,深度优先分别是什么?(只能是两类情况)
    广度优先 : 一条路走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路.如果不能,则走到终点.
    深度优先 : 一条路走到底.
    5.面向对象中super的作用。
    既执行本类又执行父类的方法, 既执行本类又执行父类的方法

    类:

    • 新式类(python3x),
    • 经典类(python2).

    单继承;
      新式类经典类一样.
    多继承:
      新式类:广度优先 类名.mro() 新式类.
      经典类:深度优先.

    初识继承:
    子类以及子类实例化的对象 可以访问父类的任何方法或变量.
    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
    class Cat:
        pass
    class Dog:
        pass
    p1 = Person('alex', 'laddyboy', 1000)
    print(p1.__dict__)
    
    # 子类实例化的对象也可以访问父类所有内容
    print(p1.breath)
    print(p1)
    p1.eat()
    
    # 类名可以访问父类所有内容
    print(Person.breath)
    Person.eat(11)
    
    查询顺序见下图:

     定义一个Animal类,写三个类:猫,狗,鸡,,每个类中都有吃喝自己的方法

    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='绿翅膀'
            '''
            # Animal.__init__(self, name, sex, age)
            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)
    #2,super().__init__(name,sex,age)
    b1 = Brid('鹦鹉','',20,'绿翅膀')
    print(b1.__dict__)
    b1.eat('金蝉')
    广度优先 : 一条路走到倒数第二级,判断,如果其他路能走到终点,则返回走另一条路.如果不能,则走到终点.
    深度优先 : 一条路走到底.
    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())  # 查询类的继承顺序
    
    
    
  • 相关阅读:
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 88怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 81.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 40怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 24.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 21.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下驱动器试运行提示过速度保护怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下驱动器如何执行绝对值清零
    倍福TwinCAT(贝福Beckhoff)基础教程 松下绝对值驱动器如何做初始化设置
    倍福TwinCAT(贝福Beckhoff)基础教程 松下官方软件开启报错伺服未就绪怎么办
    JAVA Eclipse 启动 Eclipse 弹出“Failed to load the JNI shared library jvm_dll”怎么办
  • 原文地址:https://www.cnblogs.com/zycorn/p/9368444.html
Copyright © 2011-2022 走看看