2024-06-16 12:00:50 发布
网友
我试图理解Python的类型注释是如何工作的(例如List和Dict-notlist或{})。具体来说,我对isinstance(list(), List)的工作方式很感兴趣,这样我就可以创建自己的自定义注释了。在
List
Dict
list
isinstance(list(), List)
我看到List被定义为:
class List(list, MutableSequence[T], extra=list): . . .
我对metaclass = xxx很熟悉,但是我找不到任何关于{}的文档。这是一个关键字还是仅仅是一个论点,如果是的话,它从哪里来的?它做的是我想要的吗?它与isinstance有关吗?在
metaclass = xxx
isinstance
isinstance()和issubclass()在^{}和{a2}中有钩子,typing泛型也使用这些钩子。在
isinstance()
issubclass()
typing
如果您想提供自己的泛型,那么您确实需要研究^{} module source code,特别是^{}和{a5}是如何用来定义其他泛型类型的,比如{};这些检查大多委托给{a6}。你可以用这样一个钩子定义你自己的ABC,然后定义一个泛型来子类化它。在
这里的GenericMeta元类也赋予了extra关键字参数的含义。由于typing实现仍在不断变化,因此此类内部构件的文档仍然很少,模块仍然是provisional。extra参数存储为__extra__,并在custom ^{} implementation中使用;对于extra=list,它只需将isinstance(something, List)转换为{}。在
GenericMeta
extra
__extra__
extra=list
isinstance(something, List)
注意,这些钩子实际上不支持静态钩子运行。请参阅mypy tracker中的structural subtyping discussion,进一步讨论开发人员如何考虑如何为复杂的定制类提供更好的支持,这些类可能实现也可能没有实现足够的方法,从而被视为映射或序列或类似的类。在
isinstance()
和issubclass()
在^{typing
泛型也使用这些钩子。在如果您想提供自己的泛型,那么您确实需要研究^{} module source code ,特别是^{} 和{a5}是如何用来定义其他泛型类型的,比如{};这些检查大多委托给{a6}。你可以用这样一个钩子定义你自己的ABC,然后定义一个泛型来子类化它。在
这里的} implementation 中使用;对于}。在
GenericMeta
元类也赋予了extra
关键字参数的含义。由于typing
实现仍在不断变化,因此此类内部构件的文档仍然很少,模块仍然是provisional。extra
参数存储为__extra__
,并在custom ^{extra=list
,它只需将isinstance(something, List)
转换为{注意,这些钩子实际上不支持静态钩子运行。请参阅mypy tracker中的structural subtyping discussion,进一步讨论开发人员如何考虑如何为复杂的定制类提供更好的支持,这些类可能实现也可能没有实现足够的方法,从而被视为映射或序列或类似的类。在
相关问题 更多 >
编程相关推荐