• python面向对象编程-继承与派生


    一.什么是继承

        继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类

        继承的特性是:子类会遗传父类的属性

        强调:继承是类与类之间的关系

    二.为什么用继承

        因为继承的好处就是可以减少代码的冗余

    三.如何继承

        在python中支持一个类同时继承多个父类

        在python3中

                如果一个类没有继承任何类,那默认继承object类

        在python2中

           如果一个类没有继承任何类,不会继承object类

          强调:在python3中都是新式类,只要在python2中才区别新式类与经典类

     新式类和经典类的区分:

       新式类:但凡继承了object的类以及该类的子类,都是新式类

       经典类:没有继承object的类以及该类的子类都是经典类

        

             

    class Parent1: #定义父类
        pass


    class Parent2: #定义父类
        pass


    class Sub1(Parent1): #单继承,基类是ParentClass1,派生类是SubClass
        pass


    class Sub2(Parent1,Parent2): #python支持多继承,用逗号分隔开多个继承的类

        pass

    查看继承:

        print(Paren1.__bases__)

        print(Paren2.__bases__)

        print(Sub1.__bases__)

    四. 派生:

        子类中新定义的属称为派生,在使用中始终以自己的为准

            对象查找属性的顺序:对象自己-》对象的类-》父类-》父类。

    在子类派生出的新功能中重用父类功能的方式有两种:

    方式一:与继承无关    
    指名道姓法,直接用:类名.函数名 (当成普通函使用,该传几个值就传几个

    # class OldboyPeople:
    #     school = 'oldboy'
    #
    #     def __init__(self, name, age, sex):
    #         self.name = name
    #         self.age = age
    #         self.sex = sex
    #
    # class OldboyStudent(OldboyPeople):
    #     def __init__(self,name,age,sex,stu_id):
    #         OldboyPeople.__init__(self,name,age,sex)   ####直接调用,当成普通函使用,该传几个值就传几个
    #         self.stu_id=stu_id
    #
    #     def choose_course(self):
    #         print('%s is choosing course' %self.name)直接调用,当成普通函使用,该传几个值就传几个
    #         self.stu_id=stu_id
    #
    #     def choose_course(self):
    #         print('%s is choosing course' %self.name)

      方式二:严格按照继承属性查找关系
                    super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承的关系)
                    super().__init__(不用为self传值)
        注意:

                super的完整用法是super(自己的类名,self),在python2中需要写完整而python3中可以简写为super()

    # class OldboyPeople:
    #     school = 'oldboy'
    #
    #     def __init__(self, name, age, sex):
    #         self.name = name
    #         self.age = age
    #         self.sex = sex
    #
    # class OldboyStudent(OldboyPeople):
    #     def __init__(self,name,age,sex,stu_id):
    #         # OldboyPeople.__init__(self,name,age,sex)
    #         super(OldboyStudent,self).__init__(name,age,sex) # ##super()__init__(name,age,sex)
    #         self.stu_id=stu_id
    #
    #     def choose_course(self):
    #         print('%s is choosing course' %self.name)
    #
    #
    # stu1=OldboyStudent('猪哥',19,'male',1)
    # print(stu1.__dict__)
    #
    # print(OldboyStudent.mro())
    
  • 相关阅读:
    ZOJ 1001 A + B Problem
    献给那些心软的人!!
    将表格的数据插入另一个表格
    把链接 显示为方框
    【ibus】设置ibus输入法(pinyin & sunpinyin)
    [Mongo] How to Install Mongo on Debian(不要安装)
    [Sinatra、Mongo] Mongo
    Sinatra+SQLite3+DataMapper
    [sinatra] Sinatra再入门
    [slim] Slim
  • 原文地址:https://www.cnblogs.com/Marcki/p/10111945.html
Copyright © 2020-2023  润新知