zoukankan      html  css  js  c++  java
  • 面向对象————接口类

    当我们面向对象设计一个代码的时候,通常我们调用接口的时候,会调用同一个属性,比如:

    class applePay(object):
        def pay(self,money):
            print('已经用applepay支付了%s'%money)
    class alilePay(object):
        def pay(self,money):
            print('已经用alipay支付了%s'%money)
    def pay(obj,money):
        return obj.pay(money)
    a = applePay()
    pay(a,20)

    这时候会像我们显示出  ‘已经用applepay支付了20’ 。但是,现在来了一个新的菜鸟程序员,让他再实现一个wechatpay的功能,菜鸟一看,这么简单,于是在原有代码的基础上又加上了一段:

    class applePay(object):
        def pay(self,money):
            print('已经用applepay支付了%s'%money)
    class alilePay(object):
        def pay(self,money):
            print('已经用alipay支付了%s'%money)
    def pay(obj,money):
        return obj.pay(money)
    class Wechatpay(object):
        def fuqian(self,money):
            print('已经用Wechat支付了%s'%money)
    a = Wechatpay()
    pay(a,20)


    AttributeError: 'Wechatpay' object has no attribute 'pay'

    这时候,肯定会报错,他不知道付钱用的统一接口是pay这个函数命名的,怎么办呢,这时候通常为了验证这种情况,有一个abc模块(python系统自带的)这时候,将代码改成如下:

    from abc import ABCMeta,abstractmethod
    class Payment(metaclass=ABCMeta):#元类
        @abstractmethod
        def pay(self,money):
            pass
    class applePay(Payment): def pay(self,money): print('已经用applepay支付了%s'%money) class alilePay(Payment): def pay(self,money): print('已经用alipay支付了%s'%money) class Wechatpay(Payment): def pay1(self,money): print('已经用Wechat支付了%s'%money) a = Wechatpay() TypeError: Can't instantiate abstract class Wechatpay with abstract methods pay

     这种方法可以直接对对象实例化时就可以看出来该对象的接口是否符合规范,同时,装饰器下的函数必须为pass,也可以叫做抽象类。

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

    接口类:支持多继承,接口类中的所有方法不许都不能实现。

  • 相关阅读:
    区块链python演示
    网页H5图片预览滑动模仿新浪微博插件
    AngularJS
    实现A Painless Q-learning Tutorial (深度学习笔记二)
    python线性拟合数据(深度学习笔记一)
    雪花特效登录页面
    ASP.NET Core中使用NLog记录日志
    EFCore中代码优先锲约和数据类型与数据库的对应关系
    所有数据库连接字符串示例
    看到12_234_678差点怀疑人生的事儿
  • 原文地址:https://www.cnblogs.com/zz1314/p/10428784.html
Copyright © 2011-2022 走看看