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,也可以叫做抽象类。

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

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

  • 相关阅读:
    URAL 1998 The old Padawan 二分
    URAL 1997 Those are not the droids you're looking for 二分图最大匹配
    URAL 1995 Illegal spices 贪心构造
    URAL 1993 This cheeseburger you don't need 模拟题
    URAL 1992 CVS
    URAL 1991 The battle near the swamp 水题
    Codeforces Beta Round #92 (Div. 1 Only) A. Prime Permutation 暴力
    Codeforces Beta Round #7 D. Palindrome Degree hash
    Codeforces Beta Round #7 C. Line Exgcd
    Codeforces Beta Round #7 B. Memory Manager 模拟题
  • 原文地址:https://www.cnblogs.com/zz1314/p/10428784.html
Copyright © 2011-2022 走看看