标签:法则 维护 obj pytho ali 实例化 失败 设计 tac
接口类(抽象类):
在python中是没有接口类,可以把接口类和抽象类视为同一种
定义:制定一个规范
举例:收到项目经理的要求,写一个支付:
#第一版 class Alipay: def __init__(self,money): self.money = money def pay(self): print(‘zfb支付了%s‘ % self.money) class Jd: def __init__(self, money): self.money = money def pay(self): print(‘jd支付了%s‘ % self.money)
a1 = Alipay(200)a1.pay()a2 = Jd(100)a2.pay()
#第二版,改进:使支付的方法一样 class Alipay: def __init__(self,money): self.money = money def pay(self): print(‘zfb支付了%s‘ % self.money) class Jd: def __init__(self, money): self.money = money def pay(self): print(‘jd支付了%s‘ % self.money) def pay(obj): obj.pay() a1 = Alipay(200) j1 = Jd(100) pay(a1) #把a1这个方法传给了pay()这个函数,通过其统一寻找访问函数体里的内容 #归一化设计,可维护性提高
最后定义的pay()函数是在类之外的,每次把括号内的对象代入函数代码块中,
代码块内容里调用pay()方法是先寻找本类,再寻找父类内.
由于两个类中都有相同的pay()方法,通过这个外部的函数就可以实现统一的操作调用.
#第三版 来了一个野生程序员,增加一个微信支付的功能 class Alipay: def __init__(self, money): self.money = money def pay(self): print(‘zfb支付了%s‘ % self.money) class Jd: def __init__(self, money): self.money = money def pay(self): print(‘jd支付了%s‘ % self.money) class Wechatpay: def __init__(self, money): self.money = money def weixinpay(self): print(‘wx支付了%s‘ % self.money) def pay(obj): obj.pay() # # w1 = Wechatpay(300) # w1.weixinpay() #此人新定义的类中没有与前两个类相同的pay()方法,无法实现所有类的归一化操作
第四版 发回去重写,制定一个规则(抽象类,接口类)
from abc import ABCMeta,abstractmethod
#强制执行这个接口类
class Payment(metaclass=ABCMeta): #被所有的子类继承,抽象类,接口类
@abstractmethod #装饰器
def pay(self):
pass #制定了一个规范,要求所有继承我的子类都必须要有一个pay()方法,无则在实例化的时候报错
#重要的方法名,内容不需要有
class Alipay(Payment):
def __init__(self, money):
self.money = money
def pay(self):
print(‘zfb支付了%s‘ % self.money)
class Jd(Payment):
def __init__(self, money):
self.money = money
def pay(self):
print(‘jd支付了%s‘ % self.money)
class Wechatpay(Payment):
def __init__(self, money):
self.money = money
def pay(self):
print(‘wx支付了%s‘ % self.money)
def pay(obj):
obj.pay()
w1 = Wechatpay(300) #此时,若这个类中没有pay()方法则实例化失败,会报错
#想则必须要有
标签:法则 维护 obj pytho ali 实例化 失败 设计 tac
原文地址:https://www.cnblogs.com/shachengcc1/p/11141197.html