Python 类的约束


# !/usr/bin/env python
# -*- coding:utf-8 -*-

"""
类的约束. 其实就是⽗类对⼦类进⾏约束. ⼦类必须要写xxx⽅法. 在python中约束的⽅式和⽅法有两种:

1. 使⽤抽象类和抽象⽅法, 由于该⽅案来源是java和c#. 所以使⽤频率还是很少的

2. 使⽤⼈为抛出异常的⽅案. 并且尽量抛出的是NotImplementError. 这样比较专业, ⽽且错误比较明确.(推荐)
"""


"""
类的约束:归一化设计:不管是哪一个类的对象,都调用同一个函数去完成相似的功能
方式一:
    提取父类. 然后在父类中定义好方法. 在这个方法中什么都不用做. 就抛⼀个异常就可以了.
    异常用来提醒程序员,子类都需要实现的方法。
    这样所有的子类都必须重写这个方法. 否则. 访问的时候就会报错.
"""
class Payment:
    def pay(self, money):
        raise Exception('子类必须实现pay方法')


class Wechatpay(Payment):
    def pay(self,money):
        print(f'恭喜您,使用微信成功支付{money}元')


class Alipay(Payment):
    def pay(self, money):
        print(f'恭喜您,使用支付宝成功支付{money}元')


# 此类没有实现pay方法,实例化对象时会报错
class JDpay(Payment):
    def jdpay(self, money):
        print(f'恭喜您,使用京东成功支付{money}元')


p1_wechat = Wechatpay()
p1_wechat.pay(500)

p2_Alipya = Alipay()
p2_Alipya.pay(888)

p3_JDpay = JDpay()
p3_JDpay.pay(666)  # 报错

"""
方法二:
使用元类来描述父类. 在元类中给出一个抽象方法. 
这样子类就不得不给出抽象方法的具体实现. 也可以起到约束的效果.
"""
from abc import ABCMeta,abstractmethod

class Payment(metaclass=ABCMeta):    # 抽象类 接口类  规范和约束  metaclass指定的是一个元类
    @abstractmethod  # 父类装饰器装饰的方法,子类必须重写
    def pay(self, money):
        pass  # 抽象方法



class Wechatpay(Payment):
    def pay(self,money):
        print(f'恭喜您,使用微信成功支付{money}元')


class Alipay(Payment):
    def pay(self, money):
        print(f'恭喜您,使用支付宝成功支付{money}元')


# 此类没有实现pay方法,实例化对象时会报错
class JDpay(Payment):
    def jdpay(self, money):
        print(f'恭喜您,使用京东成功支付{money}元')
    # def pay(self, money):
    #     print(f'恭喜您,使用京东成功支付{money}元')


p1_wechat = Wechatpay()
p1_wechat.pay(500)

p2_Alipya = Alipay()
p2_Alipya.pay(888)

p3_JDpay = JDpay()
p3_JDpay.pay(666)  # 报错
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值