下表是常见的运算符重载方法说明
| 方法名 | 重载说明 | 运算符调用方式 | 
| __init__ | 构造函数 | 对象创建: X = Class(args) | 
| __del__ | 析构函数 | X对象收回 | 
| __add__/__sub__ | 加减运算 | X+Y, X+=Y/X-Y, X-=Y | 
| __or__ | 运算符| | X|Y, X|=Y | 
| _repr__/__str__ | 打印/转换 | print(X)、repr(X)/str(X) | 
| __call__ | 函数调用 | X(*args, **kwargs) | 
| __getattr__ | 属性引用 | X.undefined | 
| __setattr__ | 属性赋值 | X.any=value | 
| __delattr__ | 属性删除 | del X.any | 
| __getattribute__ | 属性获取 | X.any | 
| __getitem__ | 索引运算 | X[key],X[i:j] | 
| __setitem__ | 索引赋值 | X[key],X[i:j]=sequence | 
| __delitem__ | 索引和分片删除 | del X[key],del X[i:j] | 
| __len__ | 长度 | len(X) | 
| __bool__ | 布尔测试 | bool(X) | 
| __lt__, __gt__, __le__, __ge__, __eq__, __ne__ | 特定的比较 | 依次为X<Y,X>Y,X<=Y,X>=Y, X==Y,X!=Y 注释:(lt: less than, gt: greater than, le: less equal, ge: greater equal, eq: equal, ne: not equal ) | 
| __radd__ | 右侧加法 | other+X | 
| __iadd__ | 实地(增强的)加法 | X+=Y(or else __add__) | 
| __iter__, __next__ | 迭代 | I=iter(X), next() | 
| __contains__ | 成员关系测试 | item in X(X为任何可迭代对象) | 
| __index__ | 整数值 | hex(X), bin(X), oct(X) | 
| __enter__, __exit__ | 环境管理器 | with obj as var: | 
| __get__, __set__, __delete__ | 描述符属性 | X.attr, X.attr=value, del X.attr | 
| __new__ | 创建 | 在__init__之前创建对象 | 
接下来,以比较运算符来阐述运算符比较的意义和必要性。
定义两个类
class Dollar:
    def __init__(self, value):
        self.value = value
        self.rate = 1       # 与美元的汇率
class Rmb:
    def __init__(self, value):
        self.value = value
        self.rate = 0.1431      # 1元人民币等于0.1431美元
d = Dollar(0.95)
r = Rmb(6.7)
现在请你写代码来判断d是否比r大,在不使用运算符重载的情况下,只能这样来写
d = Dollar(0.95)
r = Rmb(6.7)
def ge(dollar, rmb):
    return dollar.value > rmb.value*rmb.rate
print(ge(d, r))
你不可以直接用表达式 d > r来进行判断,因为这样比较的是两个对象的内存地址。编写一个函数来判断两个货币的大小虽然在技术上可行,但从工程上看,着实是一种丑陋的办法。现在,我通过重载__gt__方法来实现两个对象的比较,为了完成这个事情,还需要做一些额外的操作,让这两种货币拥有共同的父类
class Money:
    def __init__(self, value):
        self.value = value
    def __gt__(self, other):
        return self.value*self.rate > other.value*other.rate
class Dollar(Money):
    def __init__(self, value):
        super().__init__(value)
        self.rate = 1       # 与美元的汇率
class Rmb(Money):
    def __init__(self, value):
        super().__init__(value)
        self.rate = 0.1431      # 1元人民币等于0.1431美元
d = Dollar(0.95)
r = Rmb(6.7)
print(d > r)
只需要在父类中重载__gt__方法,就可以直接使用 > 运算符比较d 和 r的大小,这比编写一个函数要简单方便的多。
 
            扫描关注, 与我技术互动
QQ交流群: 211426309
 
                        分享日常研究的python技术和遇到的问题及解决方案