写法一:
class Payment: def pay(self, money): raise NotImplementedError class Alipay(Payment): def pay(self, money): print('支付宝支付{}元。'.format(money)) class Yunpay(Payment): def pay(self, money): print('云支付{}元。'.format(money)) class Mypay(Payment): def zhifu(self, money): print('我的支付{}元。'.format(money)) def payx(payment, money): payment.pay(money) payx(Mypay(), 90)
由于Mypay类并未实现pay方法,所以上述代码会报错: NotImplementedError
这就起到了限制作用。
但是这种写法如果不去调用Mypay.pay就不会报错。
第二种写法:
from abc import ABCMeta, abstractmethod class Payment(metaclass=ABCMeta): @abstractmethod def pay(self, money): pass class Alipay(Payment): def pay(self, money): print('支付宝支付{}元。'.format(money)) class Yunpay(Payment): def pay(self, money): print('云支付{}元。'.format(money)) class Mypay(Payment): def zhifu(self, money): print('我的支付{}元。'.format(money)) def payx(payment, money): payment.pay(money) payx(Mypay(), 90)
报错:TypeError: Can't instantiate abstract class Mypay with abstract methods pay
同样起到了限制作用,而这种写法只要调用Mypay就会报错。