Python iInstance如何为List工作?
我试图理解Python的类型注释是如何工作的(例如,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的任何文档。这是一个关键词还是仅仅是一个参数,如果是的话,它从哪里来,
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
如何工作。