接口类

接口

  • 接口是一组功能的集合,但是接口中仅包含功能的名字,不包含具体的实现代码

  • 接口本质就是一套协议标准,遵循这个标准的对象就能被调用

  • 接口的目的就是为了提高扩展性

# 关于支付的接口

class Payment:
    def pay(self, money):
        raise NotImplemented
        # 当Payment的子类使用了Payment类中pay方法就主动抛出异常,
        # 当子类中有pay方法,也就是覆盖了Payment中的pay方法,后就不会抛出异常
        # 这样达到了规范接口的目的

class Wechat(Payment):
    def pay(self, money):
        print('使用微信支付了%s'%money)

class Ali(Payment):
    def pay(self, money):
        print('使用阿里支付了%s'%money)

class Apple(Payment):
    def zhifu(self, money):
        print('使用苹果支付了%s' % money)

# 统一支付入口
def pay(pay_obj, money):
    pay_obj.pay(money)

pay(Wechat(),100)  # 使用微信支付了100
pay(Ali(), 100)  # 使用阿里支付了100
pay(Apple(), 100)  # 报错, 因为Apple里没有pay方法

接口主要是方便了对象的使用者,降低使用者的学习难度,只要学习一套使用方法,就可以以不变应万变

如果子类没有按照你的协议来设计,也没有办法限制他,将导致代码无法运行.

abc模块

from abc import abstractmethod,ABCMeta

class Payment(metaclass=ABCMeta):
    @abstractmethod
    def pay(self, money):
        pass
# 将Payment设定为一个规范的类,就使得凡是继承了Payment的类都要有一个pay方法,若没有则报错

class Apple(Payment):
    def zhifu(self, money):
        print('使用苹果支付了%s' % money)
    # 有了pay方法,实例化Apple就不会报错
    # def pay(self, money):
    #     pass

apple = Apple()  # 报错: TypeError: Can't instantiate abstract class Apple with abstract methods pay

接口类

接口类:支持多继承,接口类中的方法都必须不能实现

抽象类:不支持多继承,抽象类中的方法可以有一些代码的实现

接口类的多继承

# Tiger 走 游
# swan 走 游 飞
# eagle 走 飞
from abc import abstractmethod,ABCMeta

class Swim_Animal(metaclass=ABCMeta):
    @abstractmethod
    def swim(self):
        pass

class Walk_Animal(metaclass=ABCMeta):
    @abstractmethod
    def walk(self0):
        pass

class Fly_Animal(metaclass=ABCMeta):
    @abstractmethod
    def fly(self):
        pass


class Tiger(Walk_Animal, Swim_Animal):
    def walk(self0):
        pass
    def swim(self):
        pass

class Swan(Swim_Animal, Walk_Animal, Fly_Animal):
    def swim(self):
        pass
    def walk(self0):
        pass
    def fly(self):
        pass

class Eagle(Walk_Animal, Fly_Animal):
    def walk(self0):
        pass
    def fly(self):
        pass

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值