青少年python系列目录_老程序员115的博客-CSDN博客
青少年python教学视频ppt源码
继承?继承啥?提起继承这两个字,最先能够联想到的应该就是子继父业这个成语。还记得之前在我们的课程中提及过,在面向对象编程时,是可以依据生活中的思维方式来进行面向对象编程设计的,同样,在Python的世界里也存在像我们现实生活中的那样,也会有继承一说。
原来,在Python编程编写类时,并非总是要“白手起家”,从空白开始。如果你接下来要编写的类是另一个已有、现成的类的特殊版本,这时候我们就可以使用类的继承,即一个新的类来继承另一个已有的类。在继承关系发生后,新的类将自动获得另一个类的所有属性和方法,进而不断进化、优化。
在这里我们称原有的类为父类,而新创建的这个类我们称为子类。子类除了可以继承父类的所有属性和方法之外,同时还可以拓展开发、创建定义自己的属性和方法,以适应不同的功能需求。继承,你也可以理解为子类是父类的一种发展延伸、完善进化、具象化的一种行为,继承与被继承的两个类存在很强的关联性。
1 子类的继承
在我们创建子类的实例对象时,Python首先考虑的是给父类的所有属性赋值。为此,子类的方法__init__()需要父类来施以援手。
电动汽车是一种特殊的汽车,电动汽车是汽车的发展延伸,电动汽车包含但不仅限于汽车所具有的功能特征与外观样式,汽车包括电动汽车。这时,我们就可以认为电动汽车类继承了汽车类。
我们可以在前面所创建的Car类的基础上,创建新的ElectricCar(电动汽车),用ElectricCar类继承Car类,这样我们就可以只需要描述电动汽车所特有的属性、行为程序代码。下面来创建一个简单的ElectricCar类,它具备Car类的所有功能:
我们首先需要完成Car类的代码编写。当我们需要创建子类信息的时候,父类程序代码必须包含在当前文件中,并且位于子类前面。在定义子类时,必须在子类名称括号内指定父类的类名称。子类的初始化为接受创建Car实例所需的参数信息一致。
值得注意的是,程序中的super()方法函数,此方法函数是一个特殊方法函数,它帮助Python将父类和子类建立关联联系。这行代码让Python调用父类Car的__init__()方法来创建子类ElectricCar的__init__()方法,目的是让ElectricCar实例包含父类的所有属性。由于父类也被其他工程师称为超类(superclass),因此关键字super名称因此而来。下面,为测试继承动作是否能够正确地发挥作用,我们来创建一辆电动汽车,并且该电动汽车类中的属性、功能信息与父类相同。
我们创建ElectricCar类的一个实例对象,并将该实例对象信息存储在变量my_electricCar中。my_electricCar实例对象的创建, Python在逻辑上的运行顺序是这样的:Python自动调用了ElectricCar类中定义的方法__init__(),然后Python深一层的调用父类Car中定义的方法__init__(),最终完成实例对象的创建任务。
在my_electricCar实例对象创建时,我们传入了了实参'特斯拉(Tesla)', 'model s', 2020。
在ElectricCar类中,除了__init__()初始化方法之外,没有其他专属电动汽车的属性和方法。我们确认了电动汽车的实例对象是否具备普通汽车的行为,运行结果表明,通过类的继承行为,子类具有了父类的属性与方法。
下面我们可以试着为ElectricCar类建立电动汽车特有、专属的属性与方法。
2 定义子类属性与方法
让一个类继承另一个类后,可添加、扩展与父类不同新的属性和方法。下面来添加一个电动汽车上特有的属性(比如:电动机、蓄电池等),以及一个描述该属性的方法。我们将存蓄电池容量,并创建一个打印蓄电池容量信的方法:
我们添加了新的电动汽车特有的属性self. battery_size,并设置其初始值70。根据ElectricCar类创建的所有实例对象都将包含battery_size这个属性信息,但所有Car实例对象都不包含它。我们还添加了一个名为battery_describe ()的方法函数,battery_describe ()方法功能是打印有关电池的信息。程序运行后,可以看得到我们调用这个方法函数时,将看到一条关于电动汽车所特有的描述信息。
在通过程序来模拟现实生活中的电动汽车模型时,你可以根据所需的准确程度添加任意数量的属性和方法。如果一个属性或者方法是任何汽车都有的,而不是电动汽车特有的,就应将这个属性或者方法加入到Car类而不是ElectricCar类中。这样,继承使用Car类的子类将获得相应的功能,而ElectricCar类只包含处理电动汽车特有属性和行为的程序代码,做到分工明确、条理清晰。
3 重写父类的方法
对于父类中的方法函数,只要它不符合子类所要描述、模拟的实物行为,我们都可以通过继承行为,在子类中对其继承的父类方法函数进行重新改写,函数方法重写行为,你也可以理解子类是在为对父类的函数方法进行优化、拓展以适应子类的功能。
为此,可在子类中定义一个这样的方法,但它要跟重写的父类方法同名。这样的话,Python就不会考虑父类的这个方法,而只关注你在子类中定义的相应同名、新功能的方法。假设Car类有一个名为energy()的方法,energy()方法的功能是描述汽车行驶的能量之源,虽然普通汽车跟电动汽车一样都需要有描述它的能量之源的方法,两者所要描述的内容是不同的。对普通汽车来说,它的能量之源是燃油,而这对全电动汽车来说是不适用的,电动汽车的能量之源是蓄电池存储的电能。因此,在ElectricCar类继承Car类后,你需要重写energy()方法。
现在,如果有人对电动汽车调用energy()方法,Python将会忽略父类Car中的energy()方法,转而运行上述代码。我们可以在使用继承时,让子类保留从父类那里继承而来的“精华”,并剔除那些不需要的“糟粕”。
继承?继承啥?提起继承这两个字,最先能够联想到的应该就是子继父业这个成语。还记得之前在我们的课程中提及过,在面向对象编程时,是可以依据生活中的思维方式来进行面向对象编程设计的,同样,在Python的世界里也存在像我们现实生活中的那样,也会有继承一说。
原来,在Python编程编写类时,并非总是要“白手起家”,从空白开始。如果你接下来要编写的类是另一个已有、现成的类的特殊版本,这时候我们就可以使用类的继承,即一个新的类来继承另一个已有的类。在继承关系发生后,新的类将自动获得另一个类的所有属性和方法,进而不断进化、优化。
在这里我们称原有的类为父类,而新创建的这个类我们称为子类。子类除了可以继承父类的所有属性和方法之外,同时还可以拓展开发、创建定义自己的属性和方法,以适应不同的功能需求。继承,你也可以理解为子类是父类的一种发展延伸、完善进化、具象化的一种行为,继承与被继承的两个类存在很强的关联性。
1 子类的继承
在我们创建子类的实例对象时,Python首先考虑的是给父类的所有属性赋值。为此,子类的方法__init__()需要父类来施以援手。
电动汽车是一种特殊的汽车,电动汽车是汽车的发展延伸,电动汽车包含但不仅限于汽车所具有的功能特征与外观样式,汽车包括电动汽车。这时,我们就可以认为电动汽车类继承了汽车类。
我们可以在前面所创建的Car类的基础上,创建新的ElectricCar(电动汽车),用ElectricCar类继承Car类,这样我们就可以只需要描述电动汽车所特有的属性、行为程序代码。下面来创建一个简单的ElectricCar类,它具备Car类的所有功能:
我们首先需要完成Car类的代码编写。当我们需要创建子类信息的时候,父类程序代码必须包含在当前文件中,并且位于子类前面。在定义子类时,必须在子类名称括号内指定父类的类名称。子类的初始化为接受创建Car实例所需的参数信息一致。
值得注意的是,程序中的super()方法函数,此方法函数是一个特殊方法函数,它帮助Python将父类和子类建立关联联系。这行代码让Python调用父类Car的__init__()方法来创建子类ElectricCar的__init__()方法,目的是让ElectricCar实例包含父类的所有属性。由于父类也被其他工程师称为超类(superclass),因此关键字super名称因此而来。下面,为测试继承动作是否能够正确地发挥作用,我们来创建一辆电动汽车,并且该电动汽车类中的属性、功能信息与父类相同。
我们创建ElectricCar类的一个实例对象,并将该实例对象信息存储在变量my_electricCar中。my_electricCar实例对象的创建, Python在逻辑上的运行顺序是这样的:Python自动调用了ElectricCar类中定义的方法__init__(),然后Python深一层的调用父类Car中定义的方法__init__(),最终完成实例对象的创建任务。
在my_electricCar实例对象创建时,我们传入了了实参'特斯拉(Tesla)', 'model s', 2020。
在ElectricCar类中,除了__init__()初始化方法之外,没有其他专属电动汽车的属性和方法。我们确认了电动汽车的实例对象是否具备普通汽车的行为,运行结果表明,通过类的继承行为,子类具有了父类的属性与方法。
下面我们可以试着为ElectricCar类建立电动汽车特有、专属的属性与方法。
2 定义子类属性与方法
让一个类继承另一个类后,可添加、扩展与父类不同新的属性和方法。下面来添加一个电动汽车上特有的属性(比如:电动机、蓄电池等),以及一个描述该属性的方法。我们将存蓄电池容量,并创建一个打印蓄电池容量信的方法:
我们添加了新的电动汽车特有的属性self. battery_size,并设置其初始值70。根据ElectricCar类创建的所有实例对象都将包含battery_size这个属性信息,但所有Car实例对象都不包含它。我们还添加了一个名为battery_describe ()的方法函数,battery_describe ()方法功能是打印有关电池的信息。程序运行后,可以看得到我们调用这个方法函数时,将看到一条关于电动汽车所特有的描述信息。
在通过程序来模拟现实生活中的电动汽车模型时,你可以根据所需的准确程度添加任意数量的属性和方法。如果一个属性或者方法是任何汽车都有的,而不是电动汽车特有的,就应将这个属性或者方法加入到Car类而不是ElectricCar类中。这样,继承使用Car类的子类将获得相应的功能,而ElectricCar类只包含处理电动汽车特有属性和行为的程序代码,做到分工明确、条理清晰。
3 重写父类的方法
对于父类中的方法函数,只要它不符合子类所要描述、模拟的实物行为,我们都可以通过继承行为,在子类中对其继承的父类方法函数进行重新改写,函数方法重写行为,你也可以理解子类是在为对父类的函数方法进行优化、拓展以适应子类的功能。
为此,可在子类中定义一个这样的方法,但它要跟重写的父类方法同名。这样的话,Python就不会考虑父类的这个方法,而只关注你在子类中定义的相应同名、新功能的方法。假设Car类有一个名为energy()的方法,energy()方法的功能是描述汽车行驶的能量之源,虽然普通汽车跟电动汽车一样都需要有描述它的能量之源的方法,两者所要描述的内容是不同的。对普通汽车来说,它的能量之源是燃油,而这对全电动汽车来说是不适用的,电动汽车的能量之源是蓄电池存储的电能。因此,在ElectricCar类继承Car类后,你需要重写energy()方法。
现在,如果有人对电动汽车调用energy()方法,Python将会忽略父类Car中的energy()方法,转而运行上述代码。我们可以在使用继承时,让子类保留从父类那里继承而来的“精华”,并剔除那些不需要的“糟粕”。
总结
1、子类的继承
子类除了可以继承父类的所有属性和方法之外,同时还可以拓展开发、创建定义自己的属性和方法,以适应不同的功能需求。
2、定义子类属性与方法
让一个类继承另一个类后,可添加、扩展与父类不同新的属性和方法。
3、重写父类的方法
对于父类中的方法函数,只要它不符合子类所要描述、模拟的实物行为,我们都可以通过继承行为,在子类中对其继承的父类方法函数进行重新改写。