高度な Python-----オブジェクト指向 5.0 (オブジェクトの 3 つの主要な特性の 1 つであるポリモーフィズム)

目次

序文:

多態性

エクササイズ


序文:

        前回は 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()

 

それでは、今回はここまでです、また次回お会いしましょう~

壁紙を共有する:

おすすめ

転載: blog.csdn.net/m0_73633088/article/details/129331719