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

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]:

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