インターフェース・クラス(抽象):
Pythonでないインターフェイスクラス、抽象クラスとインターフェイスが同じクラスとみなすことはできないで
仕様開発する:定義
たとえば:プロジェクトマネージャーは、要求を受信し、支払を書き込みます。
#初版 クラスアリペイ: DEF __init__ (セルフ、マネー): self.money = マネー DEF ペイ(セルフ): 印刷(' ZFBが支払わS%'%のself.money) クラスJdとの: DEF __init__ (セルフ、マネー) : self.money = マネー DEFの有料(自己): 印刷(' JDがS%を支払っ'%のself.money)
A1 =アリペイ(200は)a1.pay()JdとのA2 =(100)a2.pay()
#第2版、改善点:支払いの方法として クラス:アリペイ DEF __init__ (セルフ、マネー): self.money = マネー DEF ペイ(セルフ): 印刷(' ZFBがS%支払わ'%のself.money) クラスJdとの: DEF __init__ :(セルフ、マネー) self.money = マネー DEFの有料(自己): 印刷(' JDがS%を支払っ'%のself.money)が DEF (OBJ)を支払う: obj.pay() A1 =アリペイ(200です) J1JD =(100 ) ペイ(A1) #は、渡された給与()関数a1と、この方法を置く、の内容にアクセスするための関数本体のための統一された外観を通じて #正規化されたデザインを、保守性を向上させます
クラス内の最後の定義()関数、機能ブロックの括弧内のオブジェクトの各世代より支払います
本発明の方法のブロックでの有料通話内容は、()、その後、クラスを見つける親を探すことです。
2つのクラスが同じ有料()メソッドを持っているので、この機能は、外部の統一された操作の呼び出しを実現することができます。
#ワイルドプログラマに第三版では、マイクロチャネルは、決済機能の増加 クラスアリペイ: DEF __init__ (セルフ、マネー): self.money = マネー DEF ペイ(セルフ): 印刷するには(「ZFBがS%を支払っ」%の自己.money) クラスJdとの: DEF __init__ (セルフ、マネー): self.money = マネー DEFの有料(自己): 印刷(' JDがS%支払わ'%のself.money) クラスWechatpay: DEF __init__の(セルフ、マネー): self.money= マネー DEFのweixinpay(セルフ): 印刷(' WXはS%支払わ'%のself.money)を DEF ペイ(OBJ): obj.pay() # # W1 = Wechatpay(300) #w1.weixinpay()#人新しいクラス定義は、すべてのクラス正規化された動作を実現することはできません最初の二つのクラスのペイ()メソッドと同じではありません
戻ると、ルール(抽象クラス、インターフェイスクラス)の開発に、毛の第四版を書き換え
、AbstractMethod ABCインポートABCMetaからの
#このインタフェースクラス施行
クラスの支払いを(メタクラス= ABCMeta): #は、すべてのサブクラスによって継承され、抽象クラス、インターフェイスをクラス
@abstractmethodの#デコレーター
DEFペイ(セルフ):
パス#は、すべて私のサブクラスのインスタンスのエラーで、もしあれば、有料()メソッドを持っている必要があります継承する必要が仕様を開発
、#重要なメソッド名をコンテンツは必要ありません
:クラスアリペイ(支払)
__init __(自己、マネー)DEFを:
self.money =マネー
DEF有料(自己):
印刷( 'ZFBがS%を支払っ' %のself.money)
Jdとのクラス(入金):
DEF __init __(自己、マネー):
self.money =マネー
DEF有料(自己):
印刷(%のself.money 'JDは%sのを支払っ')
Wechatpayクラス(支払い):
__init __(自己、マネー)DEF:
self.money =マネー
DEFペイ(セルフ):
印刷( 'WXがS%を支払っ' %のself.money)
DEFペイ(OBJ):
obj.pay()
このとき、W1 = Wechatpay(300)#、このクラス有料ではありません()メソッドは失敗のインスタンスである場合、エラーになります
#あなたが持っている必要がありますだと思います