Python3.6 操作符重载

󰃭 2017-08-24

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)

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

2.1 重载特定方法介绍

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

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)