ホームページ > バックエンド開発 > Python チュートリアル > Python の継承とポリモーフィズムを検討する

Python の継承とポリモーフィズムを検討する

リリース: 2023-07-25 15:14:56
転載
1049 人が閲覧しました

1. 継承の概要

継承は新しいクラスを作成する方法です。新しく作成されたクラスはサブクラスと呼ばれ、継承されたクラスは親と呼ばれますクラス、スーパークラス、基本クラス。継承の特徴は、親クラスの属性(機能、スキル)をサブクラスでも利用できることです。継承はクラス間の関係です。

継承により、コードの冗長性が削減され、再利用性が向上します。

実生活では、一般に、相続とは、以下に示すように、子が親の財産を継承することを指します。 ##2. 継承の使い方は?

Python の継承とポリモーフィズムを検討する

1. 継承構文


#クラス 派生クラス名(基底クラス名): #基底クラス名を記述します。括弧。

継承関係において、既存の設計されたクラスを親クラスまたは基本クラスと呼び、新しく設計されたクラスをサブクラスまたは派生クラスと呼びます。派生クラスは親クラスのパブリック メンバーを継承できますが、プライベート メンバーは継承できません。

#2. 継承の特徴

継承では、基本クラスのコンストラクター (

##) #init

    () メソッド) は自動的には呼び出されません。派生クラスの構築時に特に呼び出す必要があります。
  1. 派生クラスで基本クラスのメソッドを呼び出す必要がある場合は、「基本クラス名.メソッド名 ()」メソッドを使用してそれを実現し、クラスを追加する必要があります。基本クラスの名前プレフィックス. 、および self パラメーター変数を取得する必要があります。クラス内で通常の関数を呼び出す場合とは異なり、self パラメータを持ってくる必要はありません。この目的のために、組み込み関数 super() を使用することもできます。

  2. #Python は常に最初に対応する型のメソッドを検索します。派生クラスで対応するメソッドが見つからない場合は、派生クラスで 1 つずつ検索を開始します。基本クラス (まず、このクラスで呼び出されるメソッドを探します。見つからない場合は、基本クラスで探します)。

#3. 単一継承

3.1 単一継承

例:

class Animal: #父类
    def eat(self): 
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")




class Dog(Animal): #子类继承父类
    """
    def eat(self):
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")
    """
    pass




class Cat:
    pass




wang_cai = Dog()
wang_cai.eat()
wang_cai.drink()
ログイン後にコピー

#実行結果:


Python の継承とポリモーフィズムを検討する

##3.2 多層継承

例:

class Animal:
    def eat(self):
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")




class Dog(Animal):
    def bark(self):
        print("-----汪汪叫------")




class XTQ(Dog):
    """定义了一个哮天犬 类"""
    pass




class Cat(Animal):
    def catch(self):
        print("----捉老鼠----")




xtq = XTQ()
xtq.eat()
xtq.bark()
ログイン後にコピー

実行結果:



3.3 重写父类方法

例:

class Animal: #父类
    def eat(self):
        print("-----吃-----")


    def drink(self):
        print("-----喝-----")


 
class Dog(Animal): 
    def bark(self):
        print("-----汪汪叫------")




class XTQ(Dog): #重写Dog方法
    """定义了一个哮天犬 类"""
    def bark(self):
        print("----嗷嗷叫-----")




class Cat(Animal):
    def catch(self):
        print("----捉老鼠----")




xtq = XTQ()
xtq.eat()
xtq.bark()
ログイン後にコピー

运行结果:

Python の継承とポリモーフィズムを検討する


4. 多继承

4.1 多继承

Python の継承とポリモーフィズムを検討する

从图中能够看出,所谓多继承,即子类有多个父类,并且具有它们的特征。

Python中多继承的格式如下:

# 定义一个父类
class A:
    def printA(self):
        print('----A----')


# 定义一个父类
class B:
    def printB(self):
        print('----B----')


# 定义一个子类,继承自A、B
class C(A,B):
    def printC(self):
        print('----C----')


obj_C = C()
obj_C.printA()
obj_C.printB()
ログイン後にコピー

运行结果:

----A----
----B----
ログイン後にコピー

Python中是可以多继承的,父类中的方法、属性,子类会继承。


想一想:

如果在上面的多继承例子中,如果父类A和父类B中,有一个同名的方法,那么通过子类去调用的时候,调用哪个?

#coding=utf-8
class base(object):
    def test(self):
        print('----base test----')
class A(base):
    def test(self):
        print('----A test----')


# 定义一个父类
class B(base):
    def test(self):
        print('----B test----')


# 定义一个子类,继承自A、B
class C(A,B):
    pass


obj_C = C()
obj_C.test()


print(C.__mro__) #可以查看C类的对象搜索方法时的先后顺序
ログイン後にコピー

运行结果:

Python の継承とポリモーフィズムを検討する


5. 多态

5.1 什么是多态?

多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。

所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。

  • Python伪代码实现Java或C#的多态。

5.2 案例

Python “鸭子类型”

class Duck:
    def quack(self):
        print("Quaaaaaack!")




class Bird:
    def quack(self):
        print("bird imitate duck.")




class Doge:
    def quack(self):
        print("doge imitate duck.")




def in_the_forest(duck):
    duck.quack()




duck = Duck()
bird = Bird()
doge = Doge()
for x in [duck, bird, doge]:
    in_the_forest(x)
ログイン後にコピー

运行结果:

Python の継承とポリモーフィズムを検討する


三、总结

本文以生活中的基础现象为切入点,主要介绍了Python基础中继承和多态,包括单继承、多继承的语法、多态常见的 “鸭子类型”、 以及如何重写父类的方法都做了详细的讲解。

以上がPython の継承とポリモーフィズムを検討するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:Go语言进阶学习
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート