zoukankan      html  css  js  c++  java
  • 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基础篇(七)
    RMI基础
    Python基础篇(五)
    装饰模式
    一些linux知识和http知识
    mysql统计一个库里面的表的总数
    关于phpmailer邮件发送
    Jenkins是什么?
    Android开发——JVM、Dalvik以及ART的区别【转帖】
    好记性不如烂笔头--linux学习笔记9练手写个shell脚本
  • 原文地址:https://www.cnblogs.com/dinghanhua/p/9978274.html
Copyright © 2011-2022 走看看