第13章 面向对象编程(12)

本文详细介绍了如何利用Python中的特殊方法(魔术方法)来定制类的行为,包括重载算术运算符、比较运算符以及属性访问方式。通过实例展示了如何实现自定义浮点数类和时间类,以及如何使用这些类进行基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

13.13 用特殊方法定制类

特殊方法允许类通过重载标准操作符+,*,甚至包括分段下标及映射操作[]来模拟标准类型。如同其他很多保留标识符,这些方法都是以双下划线(__)开始及结尾的。

13.13.1 简单定制(RoundFloat2)

>>> class RoundFloatManual(object): ... def __init__(self, val): ... assert isinstance(val, float), "value must be a float!" ... self.value = val ... def __str__(self): ... return '%.2f'%self.value ... def __repr__(self): ... return self.__str__() ... >>> value = RoundFloatManual(12.0) >>> value 12.00 >>> print value 12.00 >>> RoundFloatManual(10) Traceback (most recent call last): File "<interactive input>", line 1, in <module> File "<interactive input>", line 3, in __init__ AssertionError: value must be a float! >>>
13.13.2 数值定制(Time60)

>>> class Time60(object): ... def __init__(self, hr, min): ... self.hr = hr ... self.min = min ... def __str__(self): ... return '%d:%d'%(self.hr, self.min) ... def __add__(self, other): ... return self.__class__(self.hr + other.hr, self.min + other.min) ... def __iadd__(self, other): ... self.hr += other.hr ... self.min += other.min ... return self ... __repr__ = __str__ ... >>> time = Time60(10, 20) >>> time 10:20 >>> print time 10:20 >>> time + Time60(11,10) 21:30 >>> time += Time60(1,0) >>> time 11:20 >>>
像加号(+),我们只需要重载__add__()方法。__iadd__()是用来支持像mon+=tue 这样的操作符,并把正确的结果赋给mon。重载一个__i*__()方法的唯一秘密就是它必须返回self。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值