Python-ポリモーフィズム

1.ポリモーフィズム

ポリモーフィズムとは、物事のクラスに複数の形があることを意味します。たとえば、動物には複数の形があります:猫、犬、豚

class Animal: #  同一类的事物:动物
    def talk(self):
        pass
class Cat(Animal): # 猫
    def talk(self):
        print('喵喵喵')
class Dog(Animal): # 狗
    def talk(self):
        print('汪汪汪')
class Pig(Animal): # 猪
    def talk(self):
        print('哼哼哼')

#  实例化得到三个对象
>>> cat=Cat()
>>> dog=Dog()
>>> pig=Pig()

多態性とは、オブジェクトの特定のタイプを考慮せずにオブジェクトを直接使用できることを意味します。これには、設計時にオブジェクトの使用を1つのタイプに統合する必要があります。たとえば、上記の例の猫、犬、豚はすべて動物であり、すべて動物です。トーク方式では、動物の種類を意識せずに直接利用できます。

>>> cat.talk()
喵喵喵
>>> dog.talk()
汪汪汪
>>> pig.talk()
哼哼哼

Pythonのすべてがオブジェクトであり、ポリモーフィズムはそれ自体でサポートされています

2. abcモジュールの使用

ポリモーフィズムの本質は、異なるクラスが同じメソッド名で定義されているため、クラスに関係なくオブジェクトを統一された方法で使用できることです。親クラスに抽象クラスの概念を導入することにより、サブクラスに抽象クラスの概念が必要になることをほとんど制限できません一部のメソッド名。

import abc

# 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod # 该装饰器限制子类必须定义有一个名为talk的方法
    def talk(self): # 抽象方法中无需实现具体的功能
        pass

class Cat(Animal): # 但凡继承Animal的子类都必须遵循Animal规定的标准
    def talk(self):
        pass

cat=Cat() # 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化

3.アヒルの種類

継承に依存することはできず、外観と動作が同じオブジェクトを作成するだけでよく、オブジェクトタイプに関係なくオブジェクトを使用することもできます。これは、Pythonが提唱する「ダックタイピング」です。アヒルのように歩き、それがアヒルのようです。」継承の方法と比較すると、アヒル型は次のように、プログラムのある程度の疎結合を実現します。

#二者看起来都像文件,因而就可以当文件一样去用,然而它们并没有直接的关系
class Txt: #Txt类有两个与文件类型同名的方法,即read和write
    def read(self):
        pass
    def write(self):
        pass

class Disk: #Disk类也有两个与文件类型同名的方法:read和write
    def read(self):
        pass
    def write(self):
        pass

# 鸭子类型:duck
class People:
    def speak(self):
        print("啊啊啊啊")

    def run(self):
        print("咻咻咻...")

class Dog:
    def speak(self):
        print("汪汪汪")

    def run(self):
        print("狂奔...")

class Pig:
    def speak(self):
        print("哼哼")

    def run(self):
        print("咣咣咣...")


peo1=People()
d1=Dog()
p1=Pig()


peo1.run()
d1.run()
p1.run()

おすすめ

転載: blog.csdn.net/msmso/article/details/107900862