Pythonオブジェクト向けインタフェース、抽象クラス、マルチステート詳細

4417 ワード

この例では、Pythonのオブジェクト向けインタフェース、抽象クラス、およびマルチステートについて説明します.皆さんの参考にしてください.具体的には以下の通りです.
インタフェースクラス
継承には2つの用途があります.
一:ベースクラスのメソッドを継承し、独自の変更または拡張(コード再利用)を行う
二:あるサブクラスがあるベースクラスと互換性があることを宣言し、インタフェースクラスInterfaceを定義し、インタフェースクラスにはいくつかのインタフェース名(関数名)が定義され、インタフェースの機能が実現されていないことを定義し、サブクラスはインタフェースクラスを継承し、インタフェースの機能を実現する.
インタフェースは主にjavaなどの言語の概念であり、pythonには明確な限定はない.

from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta):
  @abstractmethod
  def pay(self,money):
    pass
class Wechatpay(Payment):
  def fuqian(self,money):
    print('     %s '%money)
p = Wechatpay() #      


抽象クラス
抽象クラスとは
Javaと同様にpythonにも抽象クラスの概念があるが、モジュールを借りて実現する必要がある.抽象クラスは特殊なクラスであり、継承され、インスタンス化されないという特殊な点がある.
なぜ抽象クラスがあるのか
クラスがオブジェクトの山から同じコンテンツを抽出した場合、抽象クラスはデータ属性と関数属性を含むクラスの山から同じコンテンツを抽出したものです.
 例えば私达はバナナの类があって、リンゴの类があって、桃の类があって、これらの类から同じ内容を抽出して果物のこの抽象的な类で、あなたは果物を食べる时、1つの具体的なバナナを食べるか、1つの具体的な桃を食べるか...果物というものは永遠に食べられません.
設計の観点から見ると,クラスが現実オブジェクトから抽象化されている場合,抽象クラスはクラス抽象に基づいている.
実装の観点から,抽象クラスと一般クラスの違いは,抽象クラスには抽象メソッド(実装機能なし)しか存在せず,このクラスはインスタンス化されず継承され,サブクラスは抽象メソッドを実装しなければならない点である.この点はインタフェースと少し似ていますが、実は違います.間もなく答えが発表されます.
pythonで抽象クラスを実装する

import abc #  abc       
class All_file(metaclass=abc.ABCMeta):
  all_type='file'
  @abc.abstractmethod #      ,      
  def read(self):
    '         '
    pass
  @abc.abstractmethod #      ,      
  def write(self):
    '         '
    pass
# class Txt(All_file):
#   pass
#
# t1=Txt() #  ,          
class Txt(All_file): #       ,      read write  
  def read(self):
    print('         ')
  def write(self):
    print('         ')
class Sata(All_file): #       ,      read write  
  def read(self):
    print('         ')
  def write(self):
    print('         ')
class Process(All_file): #       ,      read write  
  def read(self):
    print('         ')
  def write(self):
    print('         ')
wenbenwenjian=Txt()
yingpanwenjian=Sata()
jinchengwenjian=Process()
#           ,           
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read()
print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type)


抽象クラスとインタフェースクラス
抽象クラスの本質はクラスであり、all_typeなどのデータ属性とread、writeなどの関数属性を含むクラスの類似性のセットを指し、インタフェースは関数属性の類似性のみを強調する.
抽象クラスはクラスとインタフェースの直接的な概念であり、同時にクラスとインタフェースの一部の特性を備え、正規化設計を実現するために使用することができる.
pythonでは、インタフェースクラスというものはありません.専門的なモジュールでインタフェースを定義しなくても、基本的な概念があるはずです.
1.マルチ継承問題
抽象クラスを継承する過程で、私たちはできるだけ多くの継承を避けなければならない.インタフェースを継承するときは、インタフェースを継承することを奨励します.
インターフェース分離の原則:
単一の合計インタフェースではなく、複数の専用インタフェースを使用します.すなわち、クライアントは不要なインタフェースに依存すべきではない.
2.方法の実現
抽象クラスでは、いくつかの抽象的な方法を基礎的に実現することができます.インタフェースクラスでは、どの方法も規範にすぎず、具体的な機能にはサブクラスの実現が必要です.
マルチ継承遍歴順序:
  • クラシッククラス:深度優先
  • 新式クラス:広さ優先
  • 継承の役割
  • コードの再利用を減らす
  • コード可読性向上
  • 仕様プログラミングモード
  • 抽象クラスとインタフェースクラス
    1.マルチ継承問題
    抽象クラスを継承する過程で、私たちはできるだけ多くの継承を避けなければならない.インタフェースを継承するときは、インタフェースを継承することを奨励します.
    2.方法の実現
    抽象クラスでは、いくつかの抽象的な方法を基礎的に実現することができます.インタフェースクラスでは、どの方法も規範にすぎず、具体的な機能にはサブクラスの実現が必要です.
    マルチステート
    多態とは一つの物事に多様な形態があることを指す.
    たじょうたいせい
    マルチステートダイナミックバインドとは何か(継承の背景で使用する場合、マルチステートとも呼ばれる場合があります)
    マルチステートとは、インスタンスタイプを考慮せずにインスタンスを使用することです.
    多態性は静的多態性と動的多態性に分けられる
  • 静的多態性:任意のタイプの演算子+を使用して
  • を演算できます.
  • 動的多様性:次の
  • 
    peo=People()
    dog=Dog()
    pig=Pig()
    #peo、dog、pig    ,        talk  
    #                      ,     
    peo.talk()
    dog.talk()
    pig.talk()
    #    ,                
    def func(obj):
      obj.talk()
    
    

    アヒルのタイプ
    Pythonは「アヒルのように見え、鳴き声が似ていて、道を歩くとアヒルのように見える」というアヒルのタイプを崇拝している.
    pythonプログラマーは通常、このような動作に基づいてプログラムを記述します.たとえば、既存のオブジェクトのカスタムバージョンを作成する場合は、そのオブジェクトを継承できます.
    外観と動作像を作成することもできますが、プログラムコンポーネントの松結合度を保存するために一般的に使用される新しいオブジェクトとは無関係です.
    Pythonに関する詳細については、「Pythonオブジェクト向けプログラム設計入門と進級チュートリアル」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニックまとめ」、「Python文字列操作テクニックまとめ」、「Python符号化操作テクニックまとめ」、「Python入門と進級クラシックチュートリアル」などのトピックを参照してください.
    ここではPythonプログラムの設計に役立つことを願っています.