Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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 iInstance如何为List工作?_Python_Python 3.x_Metaclass_Type Hinting_Isinstance - Fatal编程技术网

Python iInstance如何为List工作?

Python iInstance如何为List工作?,python,python-3.x,metaclass,type-hinting,isinstance,Python,Python 3.x,Metaclass,Type Hinting,Isinstance,我试图理解Python的类型注释是如何工作的(例如,List和Dict——而不是List或Dict)。我特别感兴趣的是isinstance(list(),list)是如何工作的,这样我就可以创建自己的自定义注释 我看到列表的定义如下: class List(list, MutableSequence[T], extra=list): . . . 我熟悉metaclass=xxx,但是我找不到关于这个extra=xxx的任何文档。这是一个关键词还是仅仅是一个参数,如果是的话,它从哪里来,

我试图理解Python的类型注释是如何工作的(例如,
List
Dict
——而不是
List
Dict
)。我特别感兴趣的是
isinstance(list(),list)
是如何工作的,这样我就可以创建自己的自定义注释

我看到
列表
的定义如下:

class List(list, MutableSequence[T], extra=list):
    . . .
我熟悉
metaclass=xxx
,但是我找不到关于这个
extra=xxx
的任何文档。这是一个关键词还是仅仅是一个参数,如果是的话,它从哪里来,它是否符合我的要求?它甚至与
isinstance
相关吗?

isinstance()和
issubclass()
都有钩子,并且
类型
泛型也使用钩子

如果您想提供自己的泛型,那么您真的需要研究,特别是如何使用和定义其他泛型类型,如
列表
;这些支票大多被委托给银行。你可以用这样一个钩子定义你自己的ABC,然后定义一个泛型来对它进行子类化

这里的
genericteta
元类也给出了
extra
关键字参数的含义。由于
类型化
实现仍在变化中,模块仍在变化中,因此此类内部构件的文档仍然很少。
extra
参数存储为
\uuuuuuuuuuu
,并在;对于
extra=list
来说,它可以归结为将
isinstance(某物,列表)
转换为
isinstance(某物,列表)


注意,对运行时检查的支持是故意限制的;静态类型检查器实际上不会运行这些钩子。请参阅mypy tracker中的,进一步讨论开发人员如何考虑如何为复杂的自定义类提供更好的支持,这些类可能实现或可能没有实现足够的方法以被视为映射或序列或类似的方法。

事实上,它没有被记录,这也意味着a)它不是公共API的一部分,或者b)它是被遗忘的;我倾向于第一个。查看
键入
的源代码,您可以看到
extra
用于,我引用:“构造一个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。你的问题似乎真的涉及到
isinstance
中的
extra
角色是什么,而不是广义上的
isinstance
如何工作。