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!

原文地址:https://www.cnblogs.com/dinghanhua/p/9978274.html