继承的意义和操作过程

继承乃面向对象的又一大特征,所谓继承就是子承父业。儿子继承父亲的家产,但是仅仅是父亲公共的东西。在面向对象中,继承就是一个类型继承另一个类型,当前类型就拥有另一个类型的公共属性和方法。达到代码的可重复使用,提高了代码的可扩充性。

继承的语法:

              class 类名称(被继承类的名称):

                            pass

父类名写作括号里,基本类是在类定义的时候,在元组之中指明的

被继承的类称为父类,也称为基类和超类,继承父类的类被称为子类,也称为派生类。所有的类型都称为对象,所有的类型都是间接或者直接继承object类的。子类继承了父类的所有公共的属性和方法。

继承链

          A继承B,B继承C,C继承D,这样就可以看出 A直接继承了B,间接继承了C,D;此时A创建的对象,可以同时使用B,C,D中所有公开的属 性和方法

多继承

            python中,一个类型,可以同时继承多个类型,同时拥有所有继承类型的所有公开的属性和方法。多继承反映了生活中表现的的多个角色。

备注:在进行代码设计的过程中,可能会出现多继承,所以尽量不要在父类中定义相同名称的属性或者方法

备注2:如果父类中出现了相同名称的属性和方法,在使用的时候子类调用时会优先继承优先调用。使用类名称为.__mro__:查看属性/方法搜索顺序。尽量不要在多个类中出现名称相同的属性和方法。

方法重写:

子类在自己类中重新定义父类中已经存在的方法,在执行该方法时,如果子类中没有重写就直接调用父类的方法,如果子类重写了该方法,就直接调用子类重写的方法!重写体现了子类的独立性和可变性(多态)。

方法重写的条件:继承的关系,父类存在的方法,子类重新定义

子类中,访问父类的属性和方法:

class User(Person):

def __init__(self, name, age):

         #直接通过父类的类名称调用父类的属性和方法

           Person.__init__(name, age)

         #通过super()来调用父类的属性和方法

           super().__init__(name, age)

在python中继承中的一些特点:

1:在继承中基类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#

2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数

3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)

何时使用继承

假如我需要定义几个类,而类与类之间有一些公共的属性和方法,这时我就可以把相同的属性和方法作为基类的成员,而特殊的方法及属性则在本类中定义,这样只需要继承基类这个动作,就可以访问到基类的属性和方法了,它提高了代码的可扩展性。

任何事情都有利有弊

继承的一个弱点就是,可能特殊的本类又有其他特殊的地方,又会定义一个类,其下也可能再定义类,这样就会造成继承的那条线越来越长,使用继承的话,任何一点小的变化也需要重新定义一个类,很容易引起类的爆炸式增长,产生一大堆有着细微不同的子类. 所以有个“多用组合少用继承”的原则

你可能感兴趣的:(继承的意义和操作过程)