程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何键入提示具有不同类型值的字典大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何键入提示具有不同类型值的字典?

开发过程中遇到如何键入提示具有不同类型值的字典的问题如何解决?下面主要结合日常开发的经验,给出你关于如何键入提示具有不同类型值的字典的解决方法建议,希望对你解决如何键入提示具有不同类型值的字典有所启发或帮助;

您正在寻找TypedDict。目前,它只是一个仅适用于mypy的扩展程序,但是有计划使其在不久的将来成为官方认可的类型。不过,我不确定PyCharm是否支持此功能。

因此,就您而言,您可以:

from mypy_extensions import TypedDict

RectangleElements = TypedDict('RectangleElements', {
    'front': line,
    'left': line,
    'right': line,
    'rear': line,
    'cog': float,
    'area': float,
    'pins': Optional[List[Pin]]
})

class Rectangle:
    def __init__(self, corners: Tuple[Tuple[float, float]], **kwargs):
        self.x, self.z = corners[0][0], corners[0][1]
        self.elements = {
            'front': line(corners[0], corners[1]),
            'left': line(corners[0], corners[2]),
            'right': line(corners[1], corners[3]),
            'rear': line(corners[3], corners[2]),
            'cog': calc_cog(corners),
            'area': calc_area(corners),
            'pins': None
        }  # type: RectangleElements

如果您使用的是Python 3.6+,则可以使用基于类的语法来更好地键入所有内容。

不过,在您的特定情况下,我认为大多数人只会将这些数据存储为常规字段而不是字典。我确定您已经虑了该方法的优缺点,所以我将不为您讲解。

解决方法

当将字典声明为文字时,是否有一种方法可以提示您特定键的值是什么?

然后讨论:在Python中是否有关于字典键入的指导原则?我想知道在字典中混合类型是否被认为是不好的做法。

这是一个例子:

在类的中声明字典__init__

(免责声明:我意识到在示例中,某些.elements条目可能更适合作为类属性,但这只是为了示例)。

class Rectangle:
    def __init__(self,corners: Tuple[Tuple[float,float]],**kwargs):
        self.x,self.z = corners[0][0],corners[0][1]
        self.elements = {
            'front': Line(corners[0],corners[1]),'left': Line(corners[0],corners[2]),'right': Line(corners[1],corners[3]),'rear': Line(corners[3],'cog': calc_cog(corners),'area': calc_area(corners),'pins': None
        }


class Line:
    def __init__(self,p1: Tuple[float,float],p2: Tuple[float,float]):
        self.p1,self.p2 = p1,p2
        self.vertical = p1[0] == p2[0]
        self.horizontal = p1[1] == p2[1]

当我键入以下内容时

rec1 = Rectangle(rec1_corners,show=True,name='Nr1')
rec1.sides['f...

皮查姆会'front' 为我建议。当我做的更好

rec1.sides['front'].ver...

皮查姆会建议 .vertical

因此,Pycharm会记住该类的字典文字声明中的键__init__,以及它们的值的预期类型。或更确切地说:它期望任何值都具有文字声明中的任何一种类型-
可能与我执行过will所做的相同self.elements = {} # type: Union[type1,type2]。无论哪种方式,我都觉得它很有帮助。

如果您的函数有类型提示的输出,Pycharm也会虑到这一点。

因此,假设在Rectangle上面的示例中,我想指出那pins是一个Pin对象列表&Hellip;如果pins是普通的类属性,则它将

    self.pins = None  # type: List[Pin]

(前提是必要的进口已经完成)

有没有办法在字典文字声明中给出相同的类型提示?

以下内容 无法 实现我想要的功能:

Union[...]在文字声明的末尾添加类型提示?

            'area': calc_area(corners),'pins': None
        }  # type: Union[Line,Tuple[float,float,List[Pin]]

在每一行中添加一个类型提示:

            'area': calc_area(corners),# type: float
            'pins': None  # type: List[Pin]
        }

这种事情是否有最佳实践?

更多背景:

我在PyCharm中使用Python,并且大量使用了打字,因为它可以帮助我预测和验证我的工作。创建新类时,有时还会将一些不常用的属性放入字典中,以避免过多的属性使对象混乱(这在调试模式下很有用)。

大佬总结

以上是大佬教程为你收集整理的如何键入提示具有不同类型值的字典全部内容,希望文章能够帮你解决如何键入提示具有不同类型值的字典所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。