我正在使用python3输入功能来获得更好的自动完成功能.
很多时候,我有使用特定键返回键/值(字典)的函数.超级简单的例子:
def get_info(name):
name_first_letter = name[0]
return {'my_name': name, 'first_letter': name_first_letter}
Run Code Online (Sandbox Code Playgroud)
我想在此函数中添加类型提示,以告诉使用此函数的其他人期待什么.
我可以这样做:
class NameInfo(object):
def __init__(self, name, first_letter):
self.name = name
self.first_letter = first_letter
Run Code Online (Sandbox Code Playgroud)
然后将函数签名更改为:
def get_info(name) -> NameInfo:
Run Code Online (Sandbox Code Playgroud)
但它需要为每个字典提供太多代码.
在这种情况下,最佳做法是什么?
在将字典声明为文字时,有没有办法输入提示我期望特定键的值?
然后,讨论:在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], corners[2]),
'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]
Run Code Online (Sandbox Code Playgroud)
当我键入以下类型
rec1 = Rectangle(rec1_corners, show=True, name='Nr1')
rec1.sides['f...
Run Code Online (Sandbox Code Playgroud)
Pycharm会建议'front' 我.更好的是,当我这样做时
rec1.sides['front'].ver... …Run Code Online (Sandbox Code Playgroud) 我是粉丝,mypy我想在具有不同类型值的字典上添加一些类型提示.
我的字典如下
{'name':'John', 'age':136, 'hobbies':['Python', 'cooking', 'reading']}
我想到的当前打字是: Dict[str, Union[str, int, List[str]]
有没有办法指定它name是一个字符串,age是一个整数,并且hobbies是一个列表(进一步特定的类型检查mypy)?
注意:此数据来自包含此类对象列表的外部源.我对它有一个有限的控制,除了循环元素并转换它们.
谢谢