类的约束
- 目的是对类进行一些正确的引导、约束和统一规范,满足正确的开发方式。以下所有示例循序渐进,可借此深入了解类的约束的形成过程
- 假设一个项目中有支付宝和 QQ 这两种支付方式
class Alipay: def pay(self, money): print("此次消费%s元" % money) class QQpay: def pay(self, money): print("此次消费%s元" % money) a = Alipay() a.pay(100) # 此次消费100元 q = QQpay() q.pay(200) # 此次消费200元
3. 现在要统一支付功能,可以这样做
class Alipay: def pay(self, money): print("此次消费%s元" % money) class QQpay: def pay(self, money): print("此次消费%s元" % money) # 设计一个接口 def pay(obj, money): obj.pay(money) # 实例化两种支付方式的类的对象 a1 = Alipay() a2 = Alipay() q = QQpay() # 直接通过统一的支付接口 (即 pay()) 来调用两种支付方式 pay(a1, 100) pay(q, 100) pay(a2, 300)
4. 假设另一个程序员添加了一个微信支付接口,但是并没有使用统一的支付标准
class Alipay: def pay(self, money): print("此次消费%s元" % money) class QQpay: def pay(self, money): print("此次消费%s元" % money) class Wechat: # 不规范的写法,支付方法名变了 def another_pay(self, money): print("此次消费%s元" % money) # 这是一个隐藏的标准 def pay(obj, money): obj.pay(money) w = Wechat() w.another_pay(300)
5. 制定一个统一的约束或标准,如果有父类,父类的方法只有一个 pass。其实就是制定了一个规范,表明子类一定要有 pay() 方法
class A: def pay(self, money): pass class Alipay(A): def pay(self, money): print("此次消费%s元" % money) class QQpay(A): def pay(self, money): print("此次消费%s元" % money) class Wechatpay(A): def another_pay(self, money): print("此次消费%s元" % money) def pay(obj, money): obj.pay(money) w1 = Wechatpay() pay(w1, 100) # w1 是类 Wechatpay 的一个实例化对象 # 当执行 pay(u1, 100) 时,类 Wechatpay 是没有 pay() 的 # 但是其父类 A 中有 pay(),只不过该方法里面只有 pass
6. 上面的示例也从侧面说明类 A 不是强制性约束,为了起到决定性的作用,可以强制加一个约束,只要不按规则走就直接报错
class A: # 如果子类没有定义这个方法,使用了父类的就报错 def pay(self, money): raise Exception("该支付方式未定义pay方法") class Alipay(A): def pay(self, money): print("此次消费%s元" % money) class QQpay(A): def pay(self, money): print("此次消费%s元" % money) class Wechatpay(A): def another_pay(self, money): print("此次消费%s元" % money) def pay(obj, money): obj.pay(money) w1 = Wechatpay() pay(w1, 100) # 运行结果: Traceback (most recent call last): File "test01.py", line 31, in <module> pay(w1, 100) File "test01.py", line 27, in pay obj.pay(money) File "test01.py", line 5, in pay raise Exception("该支付方式未定义pay方法") Exception: 该支付方式未定义pay方法
7. 约束,其实就是父类对子类进行约束,子类必须要有某个方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!