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())  # 查询类的继承顺序
    
    
    
  • 相关阅读:
    css Tab选项卡1
    顺序栈的相关操作(初始化、入栈、出栈)
    用jdk在cmd下运行编译java程序
    UNIX标准及实现
    正则表达式
    gdb调试
    CSS 公共样式
    babel更新之后的 一些坑
    webpack4.x配置详情
    webpack4.x打包配置
  • 原文地址:https://www.cnblogs.com/zycorn/p/9368444.html
Copyright © 2011-2022 走看看