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

 

posted @ 2018-06-28 17:02  Marcki  阅读(205)  评论(0编辑  收藏  举报