• python中没有接口的概念,接口类和抽象类可以视为一种,但是java中两个类完全不同
  • 定义:为特定程序的开发制定一个规范,强制程序的编写必须按照规定的方式执行 ```python

    实现简单的支付功能

    ‘’’ 方式一:创建类实现简单的支付提示,这个方式需要在实例化后分别执行每一个类中的pay方法 ‘’’ class Alipay: def _init(self, name, money):

    1. self.money = money
    2. self.name = name

    def pay(self):

    1. print("%s支付了%s" % (self.name, self.money))

class Jdpay: def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

class Wechatpay: def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

ali = Ali_pay(‘ali’, 1000) ali.pay() Jd_pay = Ali_pay(‘Jd’, 1000) Jd_pay.pay() Wechat_pay = Ali_pay(‘Wechat’, 1000) Wechat_pay.pay()

分别使用实例对象调用pay方法会使得维护起来很困难

‘’’ 第二种方式:归一化。使用函数来归一化不同类调用pay方法 ‘’’ class Alipay: def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

class Jdpay: def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

class Wechatpay: def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

def pay1(obj): obj.pay()

  1. # 创建函数,把实例化对象作为参数,在函数中调用不同对象中的pay方法,不需要每次都写不同对象调用pay()

ali = Ali_pay(‘ali’, 1000) Jd_pay = Jd_pay(‘Jd’, 1500) Wechat_pay = Wechat_pay(‘Wechat’, 2000) pay1(ali) pay1(Jd_pay) pay1(Wechat_pay)

创建函数是把功能一致的代码归一到一处,然后再统一执行,减少代码的冗余,增强代码的可维护性

‘’’第三种方式:使用抽象类来制定规范,强制执行。这里导入的是abc中的ABCMeta和abstractmethod来强制执行。定义的Payment类总的pay方法内容pass,表示该类为抽象类,所有继承该类的子类中的必须有pay方法来覆盖父类中的pay方法,并且强制名字必须为pay,不能是其他的否则会报错’’’

from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self, name, money): pass

class Alipay(Payment): def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

class Jdpay(Payment): def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

class Wechatpay(Payment): def _init(self, name, money): self.money = money self.name = name

  1. def pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

class Uspay(Payment): def _init(self, name, money): self.money = money self.name = name

  1. def asd_pay(self):
  2. print("%s支付了%s" % (self.name, self.money))

def pay1(obj): obj.pay()

  1. # 创建函数,把实例化对象作为参数,在函数中调用不同对象中的pay方法,不需要每次都写不同对象调用pay()

ali = Ali_pay(‘ali’, 1000) Jd_pay = Jd_pay(‘Jd’, 1500) Wechat_pay = Wechat_pay(‘Wechat’, 2000) us_pay = Us_pay(‘Uspay’, 100) pay1(ali) pay1(Jd_pay) pay1(Wechat_pay)

创建函数是把功能一致的代码归一到一处,然后再统一执行,减少代码的冗余,增强代码的可维护性

```

  • 使用强制类后不遵循规范会导致程序报错
    抽象类和接口类 - 图1

Note 需要注意的是:抽象类和接口类应用的场景比较少,不是很常用,但是使用的时候就是为了规范代码,如果是强制规范必须引用abc包中的ABCMeta和abstractmethod,所有被规范的类必须是设定规范类的子类