3. len和abs等函数重载
Python中可以重载的内置函数
内置函数
对应的特殊方法
说明
str(obj)
__str__()
返回对象的字符串表示
repr(obj)
__repr__()
返回对象的字面值的字符串表示(通常可用于 eval() 重建)
len(obj)
__len__()
返回对象的长度(如容器的元素数量)
abs(obj)
__abs__()
返回对象的绝对值
reversed(obj)
__reversed__()
返回反向迭代器
round(obj, n)
__round__(n)
返回 obj 舍入到小数点后 n 位精度的值
iter(obj)
__iter__()
返回一个迭代器,使对象可迭代
next(obj)
__next__()
获取迭代器的下一个值
int(obj)
__int__()
将对象转换为整数
float(obj)
__float__()
将对象转换为浮点数
complex(obj)
__complex__()
将对象转换为复数
bool(obj)
__bool__()
返回对象的布尔值(True 或 False)
hash(obj)
__hash__()
返回对象的哈希值(用于字典键、集合成员等)
内置函数重载说明
内置函数重载的方法的参数和返回值要求必须和内置函数原有的参数和返回值一致,否则可能出现不可预知的错误。
如:
len(obj) 函数
- 此函数必须返回整数。
示例
自定义一个一维向量类。存入一些列整数。使用 len(obj)等函数来取值。这里len(obj) 函数必须返回整数,其他函数没有限制。
# len(obj) 和 abs(obj) 函数的重载 示例
class MyVector:
'''自定义一维向量类。'''
def __init__(self, values):
self.data = list(values)
def __len__(self):
return len(self.data)
def __abs__(self):
return sum(self.data)
def __round__(self, n=None):
return 3.14
def __reversed__(self):
return self.data[::-1]
v = MyVector((5, -2, -4, 3))
print(len(v))
print(abs(v))
print(reversed(v))
print(round(v, 2))