isinstance如何为List工作?

2024-06-16 12:00:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解Python的类型注释是如何工作的(例如ListDict-notlist或{})。具体来说,我对isinstance(list(), List)的工作方式很感兴趣,这样我就可以创建自己的自定义注释了。在

我看到List被定义为:

class List(list, MutableSequence[T], extra=list):
    . . .

我对metaclass = xxx很熟悉,但是我找不到任何关于{}的文档。这是一个关键字还是仅仅是一个论点,如果是的话,它从哪里来的?它做的是我想要的吗?它与isinstance有关吗?在


Tags: 文档类型定义方式关键字extradictlist
1条回答
网友
1楼 · 发布于 2024-06-16 12:00:50

isinstance()issubclass()^{}和{a2}中有钩子,typing泛型也使用这些钩子。在

如果您想提供自己的泛型,那么您确实需要研究^{} module source code,特别是^{}和{a5}是如何用来定义其他泛型类型的,比如{};这些检查大多委托给{a6}。你可以用这样一个钩子定义你自己的ABC,然后定义一个泛型来子类化它。在

这里的GenericMeta元类也赋予了extra关键字参数的含义。由于typing实现仍在不断变化,因此此类内部构件的文档仍然很少,模块仍然是provisionalextra参数存储为__extra__,并在custom ^{} implementation中使用;对于extra=list,它只需将isinstance(something, List)转换为{}。在

注意,这些钩子实际上不支持静态钩子运行。请参阅mypy tracker中的structural subtyping discussion,进一步讨论开发人员如何考虑如何为复杂的定制类提供更好的支持,这些类可能实现也可能没有实现足够的方法,从而被视为映射序列或类似的类。在

相关问题 更多 >