如何在Python中对具有元组(数据类型,返回此数据类型的对象的可调用)的字典使用类型暗示?

2024-04-19 02:36:11 发布

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

这是我的第一个问题,所以我希望我不要错过任何重要的领域

我不熟悉python类型提示,我不知道如何为用于项目的字典提供类型提示

字典中有字符串作为键。值是具有两个元素的元组:数据类型和可调用,用于获取与元组的第一个元素具有相同数据类型的对象。对于每个键,数据类型可以是任意,但其相应的可调用项必须返回此数据类型的对象

换句话说,字典某种程度上是一个映射,使您能够使用可调用函数从对象中减去字段。它还告诉您减去的对象的预期数据类型(如果您希望在数据库中动态创建一个表来存储对象的所有字段,这可能很有用)。我有一个虚拟的例子如下:

class VeryComplexClass:
    def __init__(self):
        self.string_ivar = "internal variable"
        self.bool_ivar = True

    def __str__(self):
        return "string representation"

    def __bool__(self):
        return False



object = VeryComplexClass()

my_dict = {  # This is the dictionary I want to provide type hinting to
    "i_string": (str, lambda x: x.string_ivar),
    "i_bool": (bool, lambda x: x.bool_ivar),
    "o_string": (str, lambda x: str(x),
    "o_bool": (bool, lambda x: bool(x),
    "object": (VeryComplexClass, lambda x: x),
}

my_dict["i_string"][1](object)  # It returns "internal variable"
my_dict["i_bool"][1](object)  # It returns True
my_dict["o_string"][1](object)  # It returns "string representation"
my_dict["o_bool"][1](object)  # It returns False
my_dict["object"][1](object)  # It returns the object itself

到目前为止,我有以下几点:

from typing import Any, Callable, Dict, Tuple, Type, TypeVar

T = TypeVar('T')

my_dict: Dict[str, Tuple[Type[T], Callable[[Any], T]] = {
    "i_string": (str, lambda x: x.string_ivar),
    "i_bool": (bool, lambda x: x.bool_ivar),
    "o_string": (str, lambda x: str(x),
    "o_bool": (bool, lambda x: bool(x),
}

但是,我不能100%确定这是我想要的:

  • 对于字典的每个值,该符号是否接受不同的数据类型
  • 这个表示法是否明确指出元组的可调用项必须返回一个与元组的第一个元素具有相同数据类型的对象
  • 使用此符号,我可以在字典中插入/弹出项吗?(用户可能希望添加要从任意对象中减去的新字段)

提前谢谢


Tags: 对象lambdaselfstring字典objectmyit