python入门18 继承和多态

Posted dinghanhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python入门18 继承和多态相关的知识,希望对你有一定的参考价值。

 

 

继承:子类继承父类的属性和方法  class 子类名(父类1,父类2)

多态:子类重写父类的方法

判断对象是否是某个类的实例:  isinstance(object,class)

 

父类-汽车类

#coding:utf-8
#/usr/bin/python
"""
2018-11-18
dinghanhua
继承 多态
"""

\'\'\'定义一个父类-汽车类 无参构造函数,私有属性speed,方法start,speedup(每次速度+10),speeddown(每次速度-10),stop\'\'\'
class auto:
    def __init__(self):
        self.__speed = 0 #封装

    def __getspeed(self):
        return \'当前速度:%s\'%self.__speed

    def start(self):
        self.__speed = 10

    def stop(self):
        self.__speed = 0
        print(\'auto 停车\')

    def speedup(self):
        self.__speed += 10
        print(\'auto 加速\' + self.__getspeed())

    def speeddown(self):
        if self.__speed > 10:
            self.__speed -= 10
            print(\'auto 减速\' +self.__getspeed())
        else:
            self.stop()

 

子类bus

\'\'\'子类bus(auto),增加乘客数量passenger,上车geton,下车getoff.重写start方法--多态\'\'\'
class bus(auto): #继承

    def __init__(self):
        self.passenger = 0 #当前乘客数
        self.maxpassenger = 50  # 最大乘客数

    def start(self):
        print(\'bus 出发\')
        auto.start(self)

    def geton(self,num):
        if self.passenger + num <= self.maxpassenger:
            self.passenger += num
            print(\'bus 上客,当前乘客数:%s\' % self.passenger)
        else:
            raise OverflowError(\'bus 超载\')

    def getoff(self,num):
        if self.passenger >= num:
            self.passenger -= num
            print(\'bus 下客,当前乘客数:%s\' % self.passenger)
        else:
            raise Exception(\'bus 下车乘客数 多于 当前乘客数\')

 

子类car

\'\'\'子类car,重写start方法\'\'\'
class car(auto):
    def __init__(self):
        self.maxpassenger = 4 #最大乘客数

    def start(self):
        print(\'car 出发\')
        auto.start(self)

 

car,bus的子类taxi

\'\'\'子类taxi继承自car,bus\'\'\'
class taxi(car,bus): #多重继承,先继承car,再继承bus
    def __init__(self):
        bus.__init__(self)
        car.__init__(self) #注意顺序,最大乘客数=4

 

函数参数为对象

\'\'\'定义一个函数,参数是auto对象\'\'\'
def test_auto(autoobject):
    autoobject.start()
    autoobject.speedup()
    autoobject.speeddown()
    autoobject.stop()
    if isinstance(autoobject, bus): #判断是某个类的实例
        autoobject.geton(4)
        autoobject.getoff(2)

 

实例化对象

if __name__ == \'__main__\':

    #实例化
    auto1 = auto()
    car1 = car()
    bus1 = bus()
    taxi1 = taxi()

 

    #调用函数test_auto
    test_auto(auto1)

 

    test_auto(car1)

 

test_auto(bus1) 

 

test_auto(taxi1)

分别调用的是:car.start(), auto.speedup(),auto.speeddown(),auto.stop(), bus.geton(),bus.getoff()

 

the end!

 

以上是关于python入门18 继承和多态的主要内容,如果未能解决你的问题,请参考以下文章

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承

新手入门学Python基础—继承

Python从入门到精通(十四)Python面向对象的开发2,封装,多继承,多态都了解了么

Python从入门到精通(十四)Python面向对象的开发2,封装,多继承,多态都了解了么

新手入门学Python基础—多态类属性和类方法