インターフェイスと抽象クラス(イデオロギー的な概念の両方)
抽象クラスとインタフェースのクラスが何であるかを簡単に説明
Javaは主にオブジェクト指向プログラミング、より多くの尊敬のデザインパターン、およびインタフェースは、内部のデザインモードで概念的な考え方ですので、インターフェイスクラスは、ネイティブにサポートされているJavaで、Pythonはネイティブに内部インターフェイスのクラスをサポートしていますが、理由はデザインパターンのいませんこの概念は、インタフェースクラスを持ち、そして思考のPythonのデザインパターンを使用することになる、それはまた、インターフェイスクラスと接触することになります。
インターフェース:Pythonはネイティブサポートしていません。
抽象クラス:pythonのネイティブサポート
第2のインタフェースクラスを実装し、コード
次のように支払のいくつかの定義、そして最終的に統一された支払いの入り口には、コードは次のとおりです。
クラスWechatpay: DEF (セルフ、お金を)支払う: 印刷(「マイクロチャネルを使用していたが%sの要素支払っ」%マネー) クラスアリペイを: DEF (セルフ、お金を)支払う: 印刷(「アリペイ%sの要素に使用されている」%をマネー) #は、その後Applepayクラス定義 クラス:Aapplepay DEFの fuqian(セルフ、お金を): #これは有料機能を使用しない 印刷(「すでにAppleは%sの要素支払わ使用して」%の)お金を DEF )pay_obj、マネー(お支払い: #の団結主にそれを支払うために、入り口のどちらかの方法を支払います pay_obj.pay(金) 微信 = Wechatpay() #はインスタンス化 アリ= アリペイ() #はインスタンス化 のApp = Aapplepay() #インスタンス化 ペイ(微信、100) #のマイクロチャネルを介して支払い100を ペイ(アリ、200である) #アリペイを200支払う 賃金(アプリケーション、300) #ここでは賃金関数呼び出しを、そこフロントApplepayの有料機能が、fuqianを使用していないので、このエラーが発生します
結果:
C:\ Users \ユーザーsku1-1 \ PycharmProjects無題\ \ venvスクリプト\ \ python.exeのC:/ユーザー/ sku1-1 / PycharmProjects /無題/ ノート/研究インタフェースとクラスは抽象クラスをの.pyを $ 100支払うために使用されているマイクロ手紙 アリペイは200元に支払う使用されています (最新の結果最終の呼び出し)トレースバックを: ファイル「<エンコードエラー> 」、26行目、で、<モジュール> ファイル「<エンコードエラー> 」、16行目、内給与 はAttributeError:「Aapplepay 」オブジェクトが持っていますNO属性「ペイを」
上記の業績が知っていることから、第三の支払いが定義され、入学後に統一された支払によって支払うことができない、結果は道に以下のコードを変更するには、エラー、エラーになります。
#次に、クラス定義 クラスの支払いを: DEF (セルフ、金)を支払う: 昇給 NotImplementedError #は伝え、このメソッドのエラーを認識していなかった、彼らが存在しなければならない間違ったフロントを知ることができると方法は同じ名前を支払う クラス Wechatpay(支払い): #の継承支払クラスが、最初の有料機能があるかどうか、自分自身の中に見つけ、自分自身を使用する必要があり、父を見つけるだけでなく、 DEF (セルフ、金)を支払う: 印刷(「マイクロチャネルの有料%sの要素を使用している」%にお金を) クラスアリペイ(支払い): DEF(セルフ、金)を支払う: #は父見つけることだけではなく、支払いクラスを継承しますが、最初の有料機能があるかどうか、自分自身の中に見つけ、自分自身を使用する必要が 印刷(「アリペイ%sの要素に使用されている」%をマネー) #そして、クラスApplepay定義 クラスAapplepay(支払): #支払いクラスを継承しますが、最初の関数の中に自分自身を支払うがあるかどうかを調べる、何の有料機能がないため、唯一の親を見つけていないために、自分自身を使用する必要があり、 #ので、親を実行します、最終的に報告されます「NotImplementedError」エラー DEFの fuqian(セルフ、マネー): #これではありません有料機能を使用するために 印刷(「すでにAppleが人民元%sの有給使って」%のマネー) DEF 支払う(pay_obj、マネー): #の結束をエントランスいずれかの方法を支払う、それは主に支払われる pay_obj.pay(金) 微信 = Wechatpay() #はインスタンス化 アリ= アリペイは、() #はインスタンス化 のApp = Aapplepayを() #インスタンス化 賃金(微信、100 ) #のマイクロチャネル100を通る支払い 賃金(アリ、200) #のアリペイを通じて支払い200 給与(APPは、300) #の呼び出しはここで機能を支払うが、内部Applepayの前に有料機能が、fuqianを使用していないので、このエラーが発生します
結果:
マイクロチャネルは$ 100払って使用している トレースバック(最新の呼び出しの最後を): アリペイ$ 200に使用されている ファイル「<エンコードエラー> 」、ライン33は、あるに <Module1の> ファイル「<エンコードエラー> 」、23行は、あるにペイ ファイル「<エンコードエラー> 」、4行目、中ペイ NotImplementedError
私たちは、限り、あなたは存在しない関数内でのお支払い方法を支払うよう、コードから見ることができる、それが存在するはずの支払いエラーを促すことができる、直接自分の背中を書くためにエラーを報告給与、内部で直接親支払方法を実行します
あなたは、このように見つけることができます間違った場所を払っていないメソッドをコールする場合と場合には、親クラスのメソッドまたは関数に同じ方法を支払うが、これは有料メソッドを介してコールした後、エラーを見つけるための誤差法でなければなりません次のようにコードの改善は、以下のとおりです。
ABC インポートAbstractMethod、ABCMetaの クラスのお支払い(メタクラスこと= ABCMeta): #1 タイプのデフォルトのメタクラス @abstractmethod DEF ペイ(セルフ、マネー): パス #は、まさにこのような規範が確立されたことを示すために、上記の方法を使用して、以下の仕様のすべてコードは、コードは以下のメソッドを作ると、存在する同じ名前を払う必要があります #がすることはできませんが存在しない、それはエラーになり、エラーの場所エラー方法も特に指摘 クラス Wechatpay(支払いが): #は支払クラスを継承しますが、最初に自分自身を見つけますそこに有料機能は、ある親が見つけることだけではなく、自分自身を使用する必要があるかどうかを DEF (セルフ、金)を支払う: 印刷(「マイクロチャネルを使用していたが%sの要素支払っ」%マネー) クラスアリペイ(支払): DEF(自己を支払います、マネー): #継承支払いクラスが、最初、彼らは父見つけることだけではなく、そこに、機能を支払う自分自身を使用する必要がされているかどうかを確認 印刷を(「アリペイ%sの要素に使用されている」%のお金を) #そしてApplepayクラス定義 クラスAapplepay(支払いを): #支払いクラスを継承しますが、最初の独自の機能を支払うことがあるかどうかを確認、何の有料機能がないため、唯一の親を見つけていないために、自分自身を使用する必要があり、 #ので、親を実行し、最終報告書は、「NotImplementedError」意志エラー DEFの fuqian(セルフ、マネー): #これは有料機能を使用しない 印刷(「すでにAppleが人民元%sの有給使って」%のマネー) DEF 支払う(pay_objを、マネー): #統一有料入場いずれかの方法、主にそれに支払わ pay_obj.pay(金) 微信 = Wechatpay() #例としては アリ= アリペイ() #はインスタンス化 のApp = Aapplepay() #インスタンス化 #の仕様の使用開始後、あなたが電話をかける前に支払う必要はありません方法が与えられてもよいし、直接インスタンス化することができ、 #そう簡単に人々はすぐに場所のエラーを見つけることができるようになり、コード記述 #1 マイクロ手紙を通じて賃金(微信、100)#支払い100を #1 のPaypalを通じて支払うべきである#200給与(アリ、200) #のここで#は有料関数を呼び出す(アプリケーション、300)を支払うが、フロントApplepayは、内部が、fuqian機能を使用するために払っていないので、このエラーが発生します
結果:
トレースバック(最新の呼び出しの最後): ファイル「<エンコードエラー> 」、32行、で、<モジュール> はTypeError:CAN " 抽象メソッドが支払うとtは抽象クラスをインスタンス化Aapplepay
これはコード構造において実質的に鉛インターフェイスクラスを達成することができ、同様の構造を以下に示します:
ABC インポートAbstractMethod、ABCMetaの クラスのお支払い(= ABCMetaことメタクラス): #デフォルトのメタクラスの型 @abstractmethodは DEF(セルフ、金)を支払う: #の仕様サブクラスを含む方法支払わなければならない 峠 クラスA(支払): DEF、(自己を支払いますマネー):渡し たクラスB(支払): DEF(セルフ、お金を)支払う:渡し クラスC(支払): DEF(セルフ、お金を)支払う:パス
実際には、クラスは抽象クラスとインタフェースサブクラスの仕様をプレイしている、制約付きロールサブクラス、異なる場所は以下のとおりです。
インターフェース:中--- Javaの規制の役割を果たしているように、インターフェイスクラスのすべてのメソッドは、達成されてはならない、多重継承をサポートします
抽象クラス:多重継承をサポートしていません、メソッド、抽象クラスはいくつかのコードを実装することができます--- Javaで