您好,登录后才能下订单哦!
了解python3中如何使用接口类?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
我们来看一段代码去了解为什么需要接口类
class Alipay: def pay(self,money): print('支付宝支付了') class Apppay: def pay(self,money): print('苹果支付了') class Weicht: def pay(self,money): print('微信支付了') def pay(payment,money): # 支付函数,总体负责支付,对应支付的对象和要支付的金额 payment.pay(money) p=Alipay() pay(p,200) #支付宝支付了
这段代码,实现了一个有趣的功能,就是通过一个总体的支付函数,实现了不同种类的支付方式,不同是支付方式作为对象,传入函数中
但是开发中容易出现一些问题,那就是类中的函数名不一致,就会导致调用的时候找不到类中对应方法,例题如下:
class Alipay: def paying(self,money): #这里类的方法可能由于程序员的疏忽,写的不是一致的pay,导致后面调用的时候找不到pay print('支付宝支付了') class Apppay: def pay(self,money): print('苹果支付了') class Weicht: def pay(self,money): print('微信支付了') def pay(payment,money): # 支付函数,总体负责支付,对应支付的对象和要支付的金额 payment.pay(money) p=Alipay() #不报错 pay(p,200) #调用执行就会报错,'Alipay' object has no attribute 'pay'
这时候怎么办呢?可以手动抛异常:NotImplementedError来解决开发中遇到的问题
class payment: def pay(self): raise NotImplementedError #手动抛异常 class Alipay: def paying(self, money): # 这里类的方法不是一致的pay,导致后面调用的时候找不到pay print('支付宝支付了') def pay(payment, money): # 支付函数,总体负责支付,对应支付的对象和要支付的金额 payment.pay(money) p = Alipay() # 不报错 pay(p, 200) #调用的时候才会报错 'Alipay' object has no attribute 'pay'
也可以借用abc模块来处理这种错误
from abc import abstractmethod, ABCMeta #接口类中定义了一些接口名:Pay,且并未实现接口的功能,子类继承接口类,并且实现接口中的功能 class Payment(metaclass=ABCMeta): #抽象出的共同功能Pay @abstractmethod def pay(self,money):pass #这里面的pay 来源于下面类中的方法pay,意思把这个方法规范为统一的标准,另外建一个规范类Payment class Alipay(Payment): def paying(self, money): #这里出现paying和我们规范的pay不一样,那么在实例化 Alipay的时候就会报错 print('支付宝支付了') class Weicht(Payment): def pay(self,money): print('微信支付了') def pay(pay_obj,money): pay_obj.pay(money) p=Alipay() #实例化的时候就会报错 Can't instantiate abstract class Alipay with abstract methods pay 之前两个例子都是在执行的时候报错,这里不一样的是实例化就会知道是哪里发生错误了
总结:用abc模块装饰后,在实例化的时候就会报错,那么当我们代码很长的时候,就可以早一点预知错误,所以以后在接口类类似问题中用这个模块
接口继承实质上是要求“做出一个良好的抽象,这个抽象规定了一个兼容接口,使得外部调用者无需关心具体细节,
可一视同仁的处理实现了特定接口的所有对象”——这在程序设计上,叫做归一化。
感谢各位的阅读!看完上述内容,你们对python3中如何使用接口类大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。