1. 基本加减乘除、比较运算符重

方法 重载描述
__add__ 加法
__sub__ 减法
__mul__ 乘法
__floordiv__ 整除除法
__le__ 小于等于
__lt__ 小于
__eq__ 等于
__ge__ 大于等于
__gt__ 大于

1.1 运算符重载示例

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


class MyObj(int):
    def __init__(self, value):
        self._value = value

    def __add__(self, other):
        return (self._value + other._value) * 3

    def __sub__(self, other):
        return self._value - other._value

    def __mul__(self, other):
        return self._value * self._value

    def __floordiv__(self, other):
        return 'floor_div haha'

    def __eq__(self, other):
        print('==')
        return self._value == other._value

    def __le__(self, other):
        print('<=')
        return self._value <= other._value

    def __lt__(self, other):
        print('<')
        return self._value < other._value

    def __ge__(self, other):
        print('>=')
        return self._value >= other._value

    def __gt__(self, other):
        print('>')
        return self._value > other._value


if __name__ == '__main__':
    my_a = MyObj(10)
    my_b = MyObj(5)

    # 加法
    print(my_a + my_b)

    # 减法
    print(my_a - my_b)

    # 乘法
    print(my_a * my_b)

    # 整除
    print(my_a // my_b)

    # 等于
    print(my_a == my_b)
    # 小于等于
    print(my_a <= my_b)
    # 小于
    print(my_a < my_b)
    # 大于等于
    print(my_a >= my_b)
    # 大于
    print(my_a > my_b)


2. 字典操作符重载

在 Python 中,创建的类对象拥有序列和映射访问数据的方式,中括号下标访问数据,可以通过重写方法 getitemsetitemdelitemlen 实现

2.1 重载特定方法介绍

方法 描述
__getitem__(self,key) 使用键索引,返回键的值
__setitem__(self,key,value) 设置给定键的值
__delitem__(self,key) 删除给定键对应的元素
__len__ 返回元素数量
__repr__ print(x), repr(x), str(x) 对象转换成字符串


2.2 字典相关运算符重载代码示例

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


class MyObj(object):
    def __init__(self):
        print('call fun __init__')
        self.item = {}

    def __getitem__(self,key):
        print('call fun __getItem__')
        return self.item.get(key)

    def __setitem__(self,key,value):
        print('call fun __setItem__')
        self.item[key] =value

    def __delitem__(self,key):
        print('cal fun __delitem__')
        del self.item[key]

    def __len__(self):
        return len(self.item)

    def __repr__(self):
        return 'this is repr'


if __name__ == '__main__':
    my_obj = MyObj()

    print(my_obj.item)

    my_obj[4] = 'four'
    my_obj['hello'] = 'world'

    # 打印 4
    print(my_obj[4])

    # 打印字典
    print(my_obj.item)

    # 删除键值 4
    del my_obj[4]

    # 打印字典
    print(my_obj.item)
    print(len(my_obj))

    # 打印对象
    print(my_obj)
right