首页 > 应用开发 > Python > Python 序列协议的 __len__ 方法
# Python 序列协议的 `__len__` 方法
在 Python 中,序列协议要求对象实现 `__len__()` 方法来返回序列的长度。这是使对象表现得像内置序列类型(如列表、元组、字符串等)的基本协议之一。
## 如何使用 `__len__`
要使自定义类支持 `len()` 函数,你需要实现 `__len__` 方法:
```python
class MySequence:
def __len__(self):
# 返回一个表示序列长度的整数
return 42
seq = MySequence()
print(len(seq)) # 输出: 42
```
## 序列协议要求
1. `__len__` 必须返回一个非负整数
2. 如果长度为零,`__bool__` 应该返回 `False`(这是 Python 的惯用做法)
## 完整序列协议示例
一个完整的序列协议通常还包括 `__getitem__`:
```python
class MySequence:
def __init__(self, data):
self.data = data
https://zq-mobile.zhaopin.com/moment/73384909
https://zhiq.zhaopin.com/moment/73384909
https://zq.zhaopin.com/moment/73384491
https://zq-mobile.zhaopin.com/moment/73384491
https://zhiq.zhaopin.com/moment/73384491
https://zq.zhaopin.com/moment/73383924
https://zq-mobile.zhaopin.com/moment/73383924
https://zhiq.zhaopin.com/moment/73383924
https://zq.zhaopin.com/moment/73383856
https://zq-mobile.zhaopin.com/moment/73383856
https://zhiq.zhaopin.com/moment/73383856
https://zq.zhaopin.com/moment/73383209
https://zq-mobile.zhaopin.com/moment/73383209
https://zhiq.zhaopin.com/moment/73383209
https://zq.zhaopin.com/moment/73383011
https://zq-mobile.zhaopin.com/moment/73383011
https://zhiq.zhaopin.com/moment/73383011
https://zq.zhaopin.com/moment/73382140
https://zq-mobile.zhaopin.com/moment/73382140
def __len__(self):
return len(self.data)
def __getitem__(self, index):
return self.data[index]
seq = MySequence([1, 2, 3, 4, 5])
print(len(seq)) # 输出: 5
print(seq[2]) # 输出: 3
print(seq[:3]) # 输出: [1, 2, 3]
```
## 注意事项
- `__len__` 应该快速执行,因为许多 Python 操作(如 `bool()` 转换)会调用它
- 返回的值必须是整数,否则会引发 `TypeError`
- 如果长度不可用或没有意义,最好不要实现 `__len__`
通过实现 `__len__`,你的自定义对象可以更好地与 Python 的内置函数和习惯用法集成。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/34366/viewspace-3101284/ ,如需转载,请注明出处,否则将追究法律责任。