本文要讨论的类很有意思。它被称为接口类。相信这个名字对于小伙伴们来说是比较容易记住的。小编想通过界面类给大家带来有趣的操作。毕竟一直学习函数和代码,确实是一件很累人的事情,需要记忆。希望下面小编带来的例子能让大家在运行代码的过程中找到学习接口类的乐趣。
我们来看一段代码去了解为什么需要接口类
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接口类的一些有趣的例子。你觉得学习python也是一件很幸福的事情吗?小编会不定期收集有趣的例子分享给大家。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python程序产生的数据如何保存?11/27
- ♥ 如何快速拼接 Python 字符串11/16
- ♥ python如何读取文件名09/23
- ♥ 如何掌握Python3中PyMongo的使用方法?01/11
- ♥ python中的包是什么11/09
- ♥ 如何在python中找到几个数字的最大值08/21
内容反馈