Python进阶-----面对对象5.0(面对对象三大特征之--多态)

目录

前言:

多态

习题


前言:

        上一期讲了Python面对对象中的继承,而今天讲的是多态,其实多态跟继承是紧密相关的,换句话说多态是继承的一种表现形式,下面就一起来看看吧!(上一期链接Python进阶-----面对对象4.0(面对对象三大特征之--继承)_Python欧尼酱的博客-CSDN博客

多态

        多态,多态,顾名思义就是多种形态,比如哈士奇和柯基生下的小狗崽既有柯基的小短腿,又有哈士奇黑白相间的毛色,这就是一种多态。在Python面对对象是这样子定义的:在继承的过程中,不同的对象,调用同一个方法,表现出不同的形式

 多态的要求:

1.必须有类的继承

2.子类必须重写父类的方法

示例1: 

class Cat(object):
    def sound(self):
        print('喵喵喵')
    def animal(self):
        print('猫咪')
class Dog(object):
    def souund(self):
        print('汪汪汪')
    def animal(self):
        print('小狗')
class A(Dog,Cat):
    def sound(self):
        print('呜呜呜')
class B(Cat,Dog):
    def sound(self):
        print('哇哇哇')
e1=A()
e2=B()
e1.sound()
e2.sound()
#输出结果:呜呜呜
#        哇哇哇

这就是多态的表现形式了,同样都是用sound() 方法,结果却截然不同,那是因为我定义的两个子类中重写的方法不同。

示例2:

class Old(object):
    def __init__(self,food,clothes):
        self.food=food
        self.clothes=clothes
    def fun(self):
        print('work')
class New(Old):
    def __init__(self,name,food,clothes):
        self.name=name #重写添加的属性
        Old.__init__(self,food,clothes) #在重写的时候获取保留父类的相关属性
    def fun(self):
        super().fun() #获取保留父类的方法
        print('work hard')   #重写的方法
a=New('伊丽莎白二世','皇家美食','裙子')
b=Old('好吃的','粉色的裙子')
print(a.name,a.clothes,a.food)
print(b.food,b.clothes)
New.fun(a)
Old.fun(b)
#输出结果:
# 伊丽莎白二世 裙子 皇家美食
# 好吃的 粉色的裙子
# work
# work hard
# work

习题

一、饭店点餐付款
    1、定义一个饭店类
    属性:名字 , 菜单 , 金额  余额
    方法:点餐 , 付款[取款需要判断余额是否足够]

    2、定义一个自己的饭店
    继承了饭店类中的所有属性以及方法

    3、定义一个某团
    这个某团继承了第一个饭店所有属性以及方法
     , 付款需要收取打包费 , 打包费5元。

先思考思考

答案:

class Restaurant(object):
    def __init__(self,name,money):
        self.rname='R面馆'
        self.name=name
        self.money=money
        self.menu={0:['红烧牛肉面',15],1:['过桥米线',14],2:['桂林米粉',13]}
    def showmenu(self):
        print('{} welcom to {}\n 菜单如下:'.format(self.name,self.rname))
        for key,value in self.menu.items():
            print(f'选项{key}--{value[0]}--价格:{value[1]}')

    def select(self):
        self.showmenu()
        p=int(input('choose in 0,1,2:'))
        if p in self.menu:
            self.pay(self.menu[p][1])
        else:
            print('选择错误,菜单上没有')
    def pay(self,money):
        if self.money>money:
            self.money-=money
            print(f'已支付{money}元,找回{self.money}元')
        else:
            print('钱不够')
class Myres(Restaurant):
    pass
class Meituan(Restaurant):
    def pay(self,money):
        money+=5
        if self.money>money:
            self.money-=money
            print(f'已支付{money}元,找回{self.money}元')
        else:
            print('钱不够,qiongb')
yourmoney=int(input('输入你带了多少钱:'))
user=Meituan('李信',yourmoney)
user.select()

 

好了,这一期就到这里了,我们下期见~

分享一张壁纸:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fitz&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值