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 中,创建的类对象拥有序列和映射访问数据的方式,中括号下标访问数据,可以通过重写方法 getitem、setitem、delitem、len 实现
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)