• 继承


    # 继承的初识
    # # # 面向对象的三大特性  继承,封装,多态
    # # # 继承
    # #
    # # class Animal:
    # #     breath = "呼吸"
    # #     def __init__(self, name, sex, age):
    # #         self.name = name
    # #         self.sex = sex
    # #         self.age = age
    # #
    # #     def sleep(self):
    # #         print("睡觉")
    # #        return -1
    
    # #
    # # class Person(Animal):    # 括号里面的为父类,基类,超类。括号外面的子类,派生类
    # #     pass
    # #
    # #
    # # p1 = Person("ly", "m", 99)
    # #
    # # # 子类以及子类实例化的对象可以访问父类的任意属性或者方法
    # # print(p1.__dict__)
    # # print(Person.breath)
    # # print(p1.sleep())   # 实例对象·现在本类里面找,找不到就去父类,再找不到就去更上层的类。值到基类
    # #
    #
    #
    # class Animal:
    #     def __init__(self, name, sex, age):
    #         self.name = name
    #         self.sex = sex
    #         self.age = age
    #
    #     def eat(self, a1):
    #         print("{}吃{}".format(self.name,a1))
    #
    #     def sleep(self):
    #         print("{}睡".format(self.name))
    #
    #     def shit(self):
    #         print("{}拉".format(self.name))
    #
    # class Dog(Animal):
    #
    #     def barking(self):
    #         print("犬吠")
    #
    #
    # class Duck(Animal):
    #
    #     def swimming(self):
    #         print("鸭泳")
    #
    # class Cat(Animal):
    #
    #     def meow(self):
    #         print("猫叫")
    #
    # # dog1 = Dog("嘟嘟", "s", 6)
    # # dog1.sleep()
    # # dog1.barking()
    #
    #
    #
    # # 既要执行子类的方法,也要执行父类的方法
    #
    #
    # class Bird(Animal):
    #     def __init__(self, sex, name, age, wing):  #  这里可以看作是5个形参
    #         # 第一种方法,不常用
    #         # Animal.__init__(self, name, sex, age)  # 这里把前四个实参交给父类的方法执行
    #
    #         # 第二种
    #         # super(Bird, self).__init__(name,sex,age)
    #         # 可以简写为
    #         super().__init__(name,age,sex)  #常用
    #         self.wing = wing
    #
    #     def eat(self,argv):
    #         super().eat(argv)
    #         print("11是头猪")
    
    
    # b1 = Bird("公", "扁嘴", "6", "红翅膀,")
    # b1.eat("猪")
    
    
    
    # 继承的进阶
    #继承:但继承,多继承
    # 经典类,新式类。凡是继承Object都是新式类,python3中都是新式类,都默认继承Objecr, python2重默认不继承object,但可以手动继承
    # 单继承。经典类和新式类查询一样,都是从下往上找
    
    
    # class A:
    #     def func(self):
    #         print("In A")
    #
    # class B(A):
    #     def func(self):
    #         print("In B")
    #
    # class C(B):
    #     # def func(self):
    #     #     print("In C")
    #     pass
    # c1 = C()
    # c1.func()
    
    
    # 多继承。 对于新式类遵循广度优先(钻石继承), 经典类 深度优先
    
    class A:
        # def func(self):
        #     print("In A")
        pass
    
    class B(A):
        # def func(self):
        #     print("In B")
        pass
    
    class C(A):
        def func(self):
            print("In C")
        pass
    
    class G(A):
        # def func(self):
        #     print("In G")
        pass
    
    class D(B,G):
        # def func(self):
        #     print("In D")
        pass
    
    class E(C):
        def func(self):
            print("In E")
        pass
    
    class F(D,E):
        # def func(self):
        #     print("In F")
        pass
    
    
    f = F()
    f.func()  # 广度优先每个节点只走一次.如果后面的路线可以走到那个节点,则之前不会去走
    print(F.mro())  # 可以查询继承类的顺序,
                    # 广度优先[<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.G'>, <class '__main__.A'>, <class 'object'>]
    
    
    # 深度优先需要在python2 里面尝试 F ,D,B,A,G, E,C,
    #只能是继承两个类的情况(继承两个类以上太复杂的则看mro吧)
    # 广度优先一条线路走到倒数第二级,判断最后一级其他路能不能到达,如果能,则不走,不能,则走
    # 深度优先,一条线路走到底
    
    
    # 继承的优点:
        1.节省代码
        2.规范代码
       只执行类的方法
       只执行父类的方法
       执行本类和父类的方法
            父类名.方法名(参数)
            super().方法名(参数)
  • 相关阅读:
    JQuery判断checkbox是否选中-批量
    浮动跟随
    当天时间戳范围
    统计兼职人员打标签数量
    submit回车提交影响
    js 数组去除空值
    js循环
    ajax
    滚动条位置
    oc基础-set和get方法的使用
  • 原文地址:https://www.cnblogs.com/yfjly/p/10590134.html
Copyright © 2020-2023  润新知