Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python中的abc.Sequence_Python 3.x_Class_Types - Fatal编程技术网

Python 3.x python中的abc.Sequence

Python 3.x python中的abc.Sequence,python-3.x,class,types,Python 3.x,Class,Types,我在abcpython模块文档中读到,序列是实现以下功能的东西:\uuuuu getitem\uuuuuuuu、\uuu len\uuuuuuuuuuu、\uuuuuuuu iter\uuuuu、\uuuuuuuuu反向项、索引和计数 但是,当我运行以下示例时,它会产生false: 从集合导入abc 类序列(): 定义获取项目(自身): 通过 定义(自我): 通过 def索引(自): 通过 def计数(自身): 通过 定义包含(自身): 通过 定义(自我): 通过 定义反向(自): 通过 打印(

我在
abc
python模块文档中读到,
序列是实现以下功能的东西:
\uuuuu getitem\uuuuuuuu
\uuu len\uuuuuuuuuuu
\uuuuuuuu iter\uuuuu
\uuuuuuuuu反向项
索引和
计数

但是,当我运行以下示例时,它会产生false:

从集合导入abc
类序列():
定义获取项目(自身):
通过
定义(自我):
通过
def索引(自):
通过
def计数(自身):
通过
定义包含(自身):
通过
定义(自我):
通过
定义反向(自):
通过
打印(isinstance(Sequence(),abc.Sequence))#错误
当我为
abc.Collection
abc.Reversed
做类似的事情时,我得到了我期望的结果,例如,我创建了一个虚拟类,它实现了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,
\uuuu len\uuuu
并且它实际上被正确地检测为
abc.Collection
的一个实例

你知道序列有什么问题吗

编辑1:

从集合导入abc
可定制类:
定义(自我):
通过
打印(isinstance(CustomIterable(),abc.Iterable))#真

尽管我的自定义iterable不是来自
abc
的,但它仍然被识别为
iterable
,因为它实现了
\uuuuuuu iter\uuuuu
特殊方法。

您的自定义
序列
类与
abc.Sequence
类不同,因此
isinstance
将返回false

如果要查找True,则自定义类需要继承自
abc.Sequence

class Sequence(abc.Sequence):
   .....

请在第一条消息中查看我的编辑(我不知道如何在注释中设置多行代码的格式)。因此,我的自定义iterable确实被认为是
iterable
,我想这就是这些东西在引擎盖下的工作原理。像我这样的例子似乎并不重要,因为如果我实现
\uuuu iter\uuuu
\uuuu getitem\uuuuuu
,我将能够在for循环等中使用它,但它可能会成为问题,例如在静态代码分析中。如果我实现我自己的类型,我认为它是一个序列,但实际上不是,然后在它上运行mypy,我认为它可能会中断。即使你的示例对序列是正确的,那么为什么我的edi1示例会这样做
CustomIterable
不是
abc.Iterable
,也不是从它继承的,但实际上它是
abc.Iterable
。你知道这些东西是怎么工作的吗?