python 沒有接口這個概念
接口類,抽象類: 制定一個規範.
第一版
class Alipay:
def __init__(self, money):
self.money = money
def pay(self):
print('使用支付寶支付了%s' % self.money)
class Jdpay:
def __init__(self, money):
self.money = money
def pay(self):
print('使用京東支付了%s' % self.money)
a1 = Alipay(200)
a1.pay()
j1 = Jdpay(100)
j1.pay()
結果:
使用支付寶支付了200
使用京東支付了100
第二版 改進,讓你支付的方式一樣
class Alipay:
def __init__(self, money):
self.money = money
def pay(self):
print('使用支付寶支付了%s' % self.money)
class Jdpay:
def __init__(self, money):
self.money = money
def pay(self):
print('使用京東支付了%s' % self.money)
def pay(obj):
obj.pay()
a1 = Alipay(200)
j1 = Jdpay(100)
pay(a1) # 歸一化設計,通過調用pay函數,執行對應類下的方法,類名.方法
pay(j1)
使用支付寶支付了200
使用京東支付了100
第三版,制定規則,抽象類,接口類
from abc import ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta): # 抽象類(接口類):
@abstractmethod
def pay(self):
pass # 制定了一個規範
class Alipay(Payment):
def __init__(self, money):
self.money = money
def pay(self):
print('使用支付寶支付了%s' % self.money)
class Jdpay(Payment):
def __init__(self, money):
self.money = money
def pay(self):
print('使用京東支付了%s' % self.money)
class Wechatpay(Payment):
def __init__(self, money):
self.money = money
def pay(self):
print('使用微信支付了%s' % self.money)
def pay(obj):
obj.pay()
w1 = Wechatpay(200)
a1 = Alipay(200)
j1 = Jdpay(100)
pay(a1) # 歸一化設計
pay(j1)
使用支付寶支付了200
使用京東支付了100
下面的類都繼承了Payment類,Payment下面有個pay方法,使用了裝飾器,如果繼承了Payment類的類下面沒有pay方法,執行個體化子類的時候會報錯