、抽象クラスとインタフェースのクラス
二つの目的を継承します。
A:基本クラスのメソッドを継承し、自分の変更や拡張(コードの再利用)を作ります
IIは:サブクラスを宣言すると、インタフェースクラスインターフェースを定義する特定のベースクラスと互換性があり、インタフェースクラスは、インターフェース名を定義する(つまり、関数名)と、インタフェース機能を実装するサブクラスがインタフェースクラスを継承し、インターフェイスを実装しませんでした機能。
実際には、最初の意味は非常に重要な、そしてしばしば有害ではない継承されました。それは基本クラスを可能にし、サブクラスなので強い結合が起こります。
継承されて第2の意味は非常に重要です。また、「インターフェイスの継承」と呼ばれています。
このプログラミングで-インターフェイスの継承は、本質的に必要とされる「外部の発信者が細部を気にしないことができます互換性のあるインターフェースを提供し、良好な抽象化を、作るために、特定のインターフェイスのすべてのオブジェクトの非差別的取扱いを達成することができます」正規化と呼ばれます。
1.互換性のあるインタフェース3は、発信者が特定の実装の詳細を気にしないかもしれません2.規定は、均等に達成特定のインターフェイスのすべてのオブジェクトを扱うことができ、優れた抽象クラスを作ります。
#良い抽象作る クラスの支払い(オブジェクト): #は、互換性のあるインターフェースを提供 ペイ(自己)DEF: パス #マイクロチャネルの有料 クラスWeChatPay(オブジェクト): DEFペイ(セルフ、マネー): 印刷(「マイクロチャネルは、%を支払っS '%マネー) #アリペイの クラスアリペイ(オブジェクト): 有料(自己、マネー)DEF: 印刷(' %S「%マネー)のAlipayの支払 #アップルの有料 クラスApplePay(オブジェクト): 有料(自己、マネーDEF) : 印刷( 'AppleがSの%を支払っ' %マネー) :有料(OBJ、マネー)DEF obj.pay(金) Weixin = WeChatPay() アリペイ=アリペイ() applepay = applePay() 具体的な実装の詳細を気にすることなく#発信者、治療が等しく、特定のインターフェイスのすべてのオブジェクトを達成することができる 有料(Weixin、100) 支払い(Alipayのを、200です) 支払う(applepay、300)
パン・ファイルのLinuxの概念かのように、すべてがファイルハンドルすることができ、同様に、それはメモリ、ディスクを心配する必要はありません、ネットワーク - ハイレベルの外部ユーザーが無差別にすべてのインタフェースオブジェクトの互換性のあるセットを処理することができないように正規化されましたまたはスクリーン(もちろん、基礎となる設計者は、当然のことながら、「キャラクタデバイス」と「ブロックデバイス」を区別して、ターゲットデザインにすることができます:需要に応じて細部どの程度までを、)。
1
2
|
依赖倒置原则:
高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该应该依赖细节;细节应该依赖抽象。换言之,要针对接口编程,而不是针对实现编程
|
第二に、抽象クラス
抽象クラスとは何ですか
Javaのと同じように、Pythonはまた、抽象クラスの概念を持っていますが、またモジュール実装の援助を必要とする、抽象クラスはインスタンス化できない、それは特別なことが唯一継承することができている、特別なクラスであります
なぜべき抽象クラス
場合クラスが由来するのパイルオブジェクト同じコンテンツから抽出された、抽象クラスそれからのパイルクラスデータ属性および機能属性を含む同一のコンテンツから抽出。
たとえば、私たちは、同じコンテンツを抽出するクラスの桃は、あなたが果物を食べるか、特定のバナナを食べて、いずれかの特定を食べたときに、これらのクラスから、この抽象クラスの果実は、あるある、バナナのカテゴリ、Appleのクラスを持っています桃。。。。。。あなたは果物と呼ばれるものを食べることはできません。
クラスは、実際のオブジェクトから抽象来ている場合は、抽象クラスは、クラスベースの抽象が来ている、設計の観点から参照してください。
実装の観点からは、その一般的なカテゴリ内の抽象クラスと異なっている:抽象クラス抽象メソッド、クラスは、インスタンス化することはできません継承することができ、およびサブクラスは抽象メソッドを実装する必要があります。このインタフェースはやや似ていますが、実際には異なっている、答えを明らかにしようとしています
Pythonで抽象クラス
#すべてがファイルされた インポートABC#abcのモジュールは、抽象クラスを使用する実装 クラスAll_file(abc.ABCMetaを=メタクラスを): all_type =「ファイル」 abc.abstractmethod @#機能を実現することなく、抽象メソッドを定義する デフ(自己を)読み: サブクラスの必要があります定義された関数「読み 渡し #@は、機能を実装せず、定義された抽象メソッドをabc.abstractmethod DEF(自己を)書き: 」書き込み機能は、サブクラスを定義する必要があります パス #クラスtxtが(All_file): #パス #の #のT1 = txtが()のエラー# 、サブクラスは抽象メソッドの定義されていない クラスtxtが(All_fileを):#サブクラスは、抽象クラスを継承しますが、読み取りを定義し、メソッドを記述する必要があり DEF(自己を)読み: 印刷(「テキストデータ読み出し方法」) DEF書き込み(セルフ): 印刷(「テキストデータの読み出し方法」) クラスSATA(All_file):#サブクラスが抽象クラスを継承しますが、読み取りを定義し、メソッドを記述する必要があります (自己を)読んDEF: 印刷(「ハードディスクのデータの読み出し方法」) DEF(自己)書き込み: プリント(「ハードディスクのデータの読み出し方法」) クラスのプロセス(All_file):#サブクラスは、抽象クラスを継承しますが、読み取りを定義し、メソッドを記述する必要があります 読んDEF (セルフ): ('読み込むメソッドの処理データ')を印刷 書き込みDEF(セルフ): ('メソッドの処理データを読み込む')プリント wenbenwenjian = txtが() yingpanwenjian = SATA() jinchengwenjian =プロセス() #我々はそう正規化されている、つまり、すべてのものを考えることのファイルである wenbenwenjian.read() yingpanwenjian.write() jinchengwenjian.read() 印刷(wenbenwenjian.all_type) 印刷(yingpanwenjian.all_type) 印刷(jinchengwenjian.all_type)
3つの抽象クラスとインターフェイスを抽象
エッセンスは、データ属性(例えばall_type)特性および機能(例えば書き込み、読み出し)を含むクラスのセットの類似度を参照し、抽象クラスであり、インターフェースのみ類似度関数属性を強調しました。
正規のデザインを達成するために使用することができるいくつかの機能のクラスとインタフェースと一緒に抽象クラスは、直接およびインターフェースの概念間のクラスです
ないインタフェース定義された専門のモジュールによって、我々はいくつかの基本的な概念を持っている必要がある場合は、Pythonで、インタフェースクラスのようなものはありません。
1.多重継承の問題
抽象クラスを継承する過程で、我々は多重継承を回避しようとしてください;
および後継インタフェースで、私たちはあなたに代わり多重継承インタフェースを奨励します
インターフェイス分離原則: 専用のインタフェースに複数の代わりに、単一の一般的なインターフェース。そのクライアントは、これらの不要なインターフェースに依存しないでください。
抽象クラスでは、我々は達成するために、いくつかの抽象メソッドに基づいて行うことができ、
およびインターフェイスクラスで、任意の方法は、単に仕様、特定の機能のニーズサブクラス実装であります
1.多重継承の問題 抽象クラスを継承する過程で、我々は多重継承を回避しようとしてください; および後継インタフェースで、我々は多重継承することをお勧めします代わりに、インタフェースの メソッド2.達成する 抽象クラスで、私たちは抽象することができます基底実装を製造する方法、 インタフェースクラスで、任意の方法が単に指定され、特定の機能のニーズサブクラス実装