为什么在类上定义__getitem__使其在python中可迭代?

悲伤:

为什么在类上定义__getitem__使其可迭代?

例如,如果我写:

class b:
  def __getitem__(self, k):
    return k

cb = b()

for k in cb:
  print k

我得到的输出:

0
1
2
3
4
5
6
7
8
...

我真的希望看到“对于cb中的k:”返回的错误:

爱德华·戴尔(Edward Dale):

如果查看定义迭代器的PEP234,它会显示:

1. An object can be iterated over with "for" if it implements
   __iter__() or __getitem__().

2. An object can function as an iterator if it implements next().

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

支持__getitem__的类的Python类型提示

为什么Python中没有第一个(可迭代的)内置函数?

Python:使类可迭代

为什么Java不允许在迭代器上使用foreach(仅在可迭代对象上)?

__getitem__ python中的重载

如何将嵌套名称用作列表推导中先前可迭代的__getitem__索引?

Python中序列__getitem__的原型定义是什么?

“可迭代”在Python中到底是什么意思?为什么我的实现__getitem __()的对象不是可迭代的?

Python 3.5键入ABCMeta不会定义'__getitem__'

为什么新旧样式的python类在将切片传递给__getitem__的方式上有所不同

为什么自定义对象在python中可哈希化(并在dict中可用)?

为什么不给__getitem__分配一个类呢?

python3中的可迭代类

为什么在使用__getitem__进行迭代时调用__len__而不使用结果?

有没有一种方法可以为定义__getitem__方法的类禁用迭代而无需在键上施加约束?

覆盖Python元类__getitem__

为什么mypy如果具有__len__和__getitem__但没有__iter__,则不将其视为可迭代的类

Python数据集类+ PyTorch数据加载器:卡在__getitem__上,如何在测试期间获取索引,标签等?

Python:过滤可迭代的类

在python上覆盖__getitem__

python中的自定义类上的迭代器在python中引发错误

隐秘的python错误'classobj'对象没有属性'__getitem__'。我为什么得到这个?

为什么在自定义迭代器中返回 self ?

PyO3 在 Rust 中实现 python 可迭代类

尝试在 python 类中实现 __getattribute__/__setattr__ 和 _getitem__/__setitem__ 时出现 RecursionError

自定义列表类 __getitem__ 方法失败

类“int”未定义“__getitem__”,因此不能在其实例上使用“[]”运算符

为什么在 aioinflux 中使用用户定义的数据类的可迭代调用“write”似乎只插入最后一项?

Python 的 __getitem__ 的 Rust 版本