【问题标题】:Python 3 dictionary with known keys typing具有已知键输入的 Python 3 字典
【发布时间】:2017-10-28 18:38:47
【问题描述】:

我正在使用 Python 3 键入功能来更好地自动完成。

很多时候我的函数会返回带有特定键的键/值(字典)。超级简单的例子:

def get_info(name):
    name_first_letter = name[0]
    return {'my_name': name, 'first_letter': name_first_letter}

我想给这个函数添加类型提示,告诉其他使用这个函数的人会发生什么。

我可以这样做:

 class NameInfo(object):
     def __init__(self, name, first_letter):
         self.name = name
         self.first_letter = first_letter

然后将函数签名改为:

def get_info(name) -> NameInfo:

但是每个字典都需要太多的代码。

在这种情况下,最佳做法是什么?

【问题讨论】:

标签: python dictionary type-hinting python-typing typeddict


【解决方案1】:

正如 Blckknght 所指出的,你和斯坦尼斯拉夫·伊万诺夫在 cmets 中,你可以使用NamedTuple

from typing import NamedTuple


class NameInfo(NamedTuple):
    name: str
    first_letter: str


def get_info(name: str) -> NameInfo:
    return NameInfo(name=name, first_letter=name[0])

从 Python 3.8 开始,您可以使用TypedDict,这与您想要的更相似:

from typing import TypedDict


class NameInfo(TypedDict):
    name: str
    first_letter: str


def get_info(name: str) -> NameInfo:
    return {'name': name, 'first_letter': name[0]}

【讨论】:

  • 这样你会得到一些特定于类的限制,例如你不能使用 msgpack 打包你的类。
  • 如何定义,NameInfo 有带服务符号的键,例如last#name: str?
  • @IvanBryzzhin 你可以试试alternative syntax
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2016-01-28
  • 2015-10-28
  • 1970-01-01
  • 2017-01-20
  • 2013-02-16
  • 2014-12-24
相关资源
最近更新 更多