パイソン|多型

これまでのところ非常に理解していない、最初に正しい再び、より深く、より正しい理解をプログラミングする間、後日、既存のレコードを理解しています。

この記事の文書は、以下の分類の使用など、「最初の引数は、」純粋に個人的な分類の記録を容易にすることである、学習過程で3つの多型を聞きました。

内容:

まず、私は3つの多型の説明を見てきました

第二に、アヒルモデル

 

----- -----テキスト

まず、私は3つの多型の説明を見てきました

1.異なるサブクラスオブジェクト、実行の異なる結果を生成し、同じ方法親クラスを呼び出します

 目的:コードの柔軟性を高めるために、

 継承し、前提条件として、親クラスのメソッドをオーバーライドするには

 この方法は、スキルを起動され、それはクラスの内部設計には影響しません

クラス・ドッグ(オブジェクト):
     デフ __init__ (自己、名):
        self.name = 名前は

    DEF (自己)を再生:
         印刷" %sのジャンプジャンプ遊び"%のself.name)


クラスXiaotianDog(犬):
     デフ(自己)を再生:
         印刷" %sのフライフライプレイ"%のself.name)


クラスの人(オブジェクト):
     デフ __init__ (自己、名):
        self.name = 名前の

    デフplay_with_dog(自己、犬):
         印刷" %のSの%Sと幸せ再生"(self.name、dog.name))
        dog.play()  異なるオブジェクトを、同じメソッドを呼び出し、異なる結果


wangcai =犬(" wangcai " 
Dawangは XiaotianDog =(" Dawang " 

暁明 =人(" 暁明" 

#1 xiaoming.play_with_dog( "wangcai")エラー友人 
xiaoming.play_with_dog(wangcai)  犬に合格するには、オブジェクト 
xiaoming.play_with_dog(dawangを)


2.オブジェクトがその環境を実証異なる形で異なる機能を有する種々の形態を有し、物体は、多型特性に有します
多型は、[継承]関係立場で発生します
1  クラス教師():
 2      DEF (自己)を教える:
 3          プリント" ---教える" 4  
5  
6  クラスドライバ():
 図7は、     DEF (自己)を駆動:
 8          プリント" ドライブ--- " 9  
10  
11  クラスマン(教師、ドライバ):
 12      DEF 教える(自己):
 13          プリント" 教示パイソン" 14  
15は、     デフドライブ(自己):
 16         印刷" ドライブCAR " 17。 
18れる 
19。 クラスデモ():
 20です     DEF 旅行(セルフ、ドライバ):
 21です         driver.drive()
 22は 
23である     DEF 研究(自己、先生):
 24          teacher.teach()
 25  
26です 
27  車でそれを旅行を完了することで、ドライバオブジェクトを作成
28 D = )ドライバ(
 29 DEMO1 = デモ()
 30  demo1.travel(D)
 31  
32  ターゲットドライブに直接はこの事を駆動するために行われます、必要としません別のドライバ多型のオブジェクトを作成する[方法] 
33  これは、オブジェクトは、他のかもしれ駆動し、どんなには、限り、ドライブだけで罰金として、そんなに言った、道はないのですか?ハハ
34は、男性= )男性(
 35デモ= デモ()
 36  #1 man.drive()
37  demo.travel(男性)
 38は、 
39  教師を配置する必要がある場合、これは直接送信され得る、多型の考え方に応じて男性
40 demo.study(男性)

 


3.基本モード(データ型)の異なるインターフェースを提供する能力を
インターフェイス:関数またはメソッドを指し

そのような文字列、整数などの異なるデータタイプのリストのインタフェースを提供するために、印刷機能として、単に印刷を使用し、すべてのデータ型をサポートすることができる
ような異なる機能、定義して呼び出す必要なし:、、print_strをprint_intをprint_listなど
1枚の プリント" こんにちは" 2  プリント(23 3  プリント([1、2、3])
 
あなたは、猫/犬/羊を3クラスを定義食べて、その定義の方法することができ、あなたは猫、犬、羊3匹の動物、魚を食べるように対応し、骨、草を作成するプログラムを書きたいとしよう。
Cat.eat()()、Dog.eatを食べるために猫に対応食べるので、各オブジェクトは、動物食べるをサポートするためのメソッド・インターフェースを有している食べるSheep.eat()は、羊に対応し、イヌに対応します。
すなわち:同じ3つの異なるオブジェクトのためのインタフェースを提供します。
いかなる多型が各動物cat_eatにそれぞれ一意に対応する必要がない場合()/ dog_eat()/ sheep_eat。
1  クラス犬:
 2      DEF (自己を)EAT:
 3          の印刷" 私は犬だ、私は骨を食べる" 4  
5  
6  クラスキャット:
 7は、     DEF (自己を)EAT:
 8          印刷" 私は猫です、私は魚を食べます" 9  
10  
11  クラスの羊:
 12である     DEF :(自己)EAT
 13は         プリントは" 私は羊の放牧I " 14  
15  
16  DEFのanimal_eat(動物):
 17      animal.eat()  同じインタフェースを使用して、異なる動物(データオブジェクト)
18  
19  
20  animal_eat(犬())
 21  animal_eat(キャット())
 22  animal_eat(ヒツジ())
 23  "" " 
24  のコードの実行、印刷:
 25  私は犬午前私は骨を食べて
 26  私は魚を食べ、私は猫だ
 27  私は放牧、羊午前私の
 28  「」 "

 

 

第二に、アヒルモデル

 

呼び出されたクラスは、継承を使用していませんが、構文レベルでは、コールの関係満たすために
、特別な多形相を

するだけでなく、メソッド、プロパティはまたのような、あなたが名前を必要とするバンドにプロパティができるようにという属性、鴨の種類を持つことができます

多型:フォームとの通話で、いわゆる多形性の要件を満たし
アヒルのモデルを:呼び出し関係に会うが、正式に合致しません
1つの #の要件:男を見つけるためには、特定の事柄を教えるようになった
2  クラス:先生()
 3      DEF ティーチ(セルフ):
 4          印刷" ティーチ--- " 5  
6  
7  クラスマン(教師):
 8      DEFティーチ(セルフ)
。9      #の     印刷( "パイソンを教える")
10  
。11      DEF ドライブ(自己):
 12は、         プリント" ドライブCAR " 13である 
14  
15  クラスデモ():
 16      DEF 研究(セルフ、先生)
 。17         teacher.teach()
 18  
19  
20  クラスTeachGame():
 21      DEF ティーチ(セルフ):
 22          印刷ゲームをプレイすることを教える23  
24  
25  教師が親クラスの男は、方法を教える継承見つけることが来て、何かを教えることができます
26は D = デモ()
 27人= 人()
 28  d.study(男性)
 29の 
30  #のTeachGame継承クラス自体を含むが、プロセスの研究だけTeachGameで実行する、オブジェクトDの方法ドームインスタンスを教示していませんある
31  それは多型の特殊な形である場合に偽
32プレイヤー= TeachGame()
 33である(プレーヤ)d.study

 

 

現在、あなたが言うことができなかった愚かです。

[この記事では、学習の交換のためだけです]

 

おすすめ

転載: www.cnblogs.com/ykit/p/11250378.html