目次
序文:
前回は Python のオブジェクトに対する継承についてお話しましたが、今日はポリモーフィズムについて話します。実は、ポリモーフィズムは継承と密接に関係しています。言い換えれば、ポリモーフィズムは継承の一形態です。一緒に見てみましょう Bar! (最後のリンクはPython Advanced ----- オブジェクト指向 4.0 (オブジェクトの 3 つの主要な特性の 1 つ - 継承)_Python Ouni Sauce のブログ - 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 つのサブクラスで書き換えられたメソッドが異なるためです。
例 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. レストランの注文と支払い
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()
それでは、今回はここまでです、また次回お会いしましょう~
壁紙を共有する: