为键和项目编写类型提示的正确方法

Posted

技术标签:

【中文标题】为键和项目编写类型提示的正确方法【英文标题】:Correct way to write type hints for keys and items 【发布时间】:2019-08-25 20:06:48 【问题描述】:

我有一些 Python 代码(针对 Python 3.5、3.6 和 3.7 运行)并添加了一些类型提示,用于使用 mypy 进行静态类型检查。

请看下面的sn-p:

class MyParams(Singleton, metaclass=MyParamsMeta):
    @classmethod
    def keys(cls):  # TODO -> type?
        return cls._params.keys()

    @classmethod
    def items(cls):  # TODO -> type?
        return cls._params.items()

    _params = _load_from_csv()  # returns Dict[str, MyParam]

def keys(cls)def items(cls) 的正确类型提示语句是什么?

【问题讨论】:

您查看过typing 文档吗?它提供例如KeysView. 【参考方案1】:

你可以使用typing模块

import typing

class MyParams(Singleton, metaclass=MyParamsMeta):
    @classmethod
    def keys(cls) -> typing.collections.KeysView:
        return cls._params.keys()

    @classmethod
    def items(cls) -> typing.collections.ItemsView:
        return cls._params.items()

    _params = _load_from_csv()  # returns Dict[str, MyParam]

【讨论】:

typing.collections.KeysView 在我的设置中没有找到,但是 typing.KeyView 没问题(python 3.6.8) @al.zatv python Python 3.6.8 (default, Aug 20 2019, 17:12:48) Type 'copyright', 'credits' or 'license' for more information IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import typing In [2]: typing.collections.KeysView Out[2]: collections.abc.KeysView In [3]:

以上是关于为键和项目编写类型提示的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NSDictionary 中为键和对象添加数组

如何将 JSON 属性值转换为键和值数组

如何导出所有 Firebase 远程配置键和值?

JAVA 一个序列号项目,请大神帮忙看下思路是不是正确?

项目映射时获取键和项目 onPress TouchableOpacity

VS2010打开项目提示未能正确加载解决方案中一个或多个项目,请问怎么回事? 要交课程设计,突然出现此问题