【发布时间】:2021-02-15 15:20:45
【问题描述】:
我在abc python 模块文档中读到Sequence 是实现以下内容的东西:__getitem__、__len__、__contains__、__iter__、__reversed__、index和count。
然而,当我运行以下示例时,它会产生错误:
from collections import abc
class Sequence():
def __getitem__(self):
pass
def __len__(self):
pass
def index(self):
pass
def count(self):
pass
def __contains__(self):
pass
def __iter__(self):
pass
def __reversed__(self):
pass
print(isinstance(Sequence(), abc.Sequence)) # False
当我为abc.Collection 或abc.Reversed 做类似的事情来玩耍时,我得到了我期望的结果,例如,我创建了一个实现__contains__、__iter__、__len__ 的虚拟类,它是实际上被正确检测为abc.Collection 的实例。
你知道Sequence有什么问题吗?
编辑 1:
from collections import abc
class CustomIterable:
def __iter__(self):
pass
print(isinstance(CustomIterable(), abc.Iterable)) # True
即使我的自定义迭代不是来自abc,它仍然被识别为Iterable,因为它实现了__iter__ 特殊方法。
【问题讨论】:
-
我觉得和def runtime_checkable有关。
标签: python python-3.x class types sequence