目录
前言:
上一期讲了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()
好了,这一期就到这里了,我们下期见~
分享一张壁纸: