如何从 Python 中的方法为字典启用代码完成?

How to enable code completion for a dictionary from method in Python?

我将 Python 3.6 与 PyCharm 一起使用,令人沮丧的是不支持字典对象特殊情况(具有固定键模式)的代码完成。

举例来说,我创建并尝试访问这样一个简单的字典对象:

inventory = {'name': 'hammer', 'price': 2.3}
inventory['']

当我将光标放在引号 ' ' 内并点击 Ctrl + Space 时,我得到了代码补全,IDE 正确地建议了字典对象中所有可能的键。太棒了

但是如果我尝试将它构建为一个实用函数 returns 这个相同的字典对象,比如使用用户提供的值但使用相同的字典键 - 那么我不再获得代码完成!

def get_inventory(name: str, price: float):
    return {'name': name, 'price': price}

inventory = get_inventory('hammer', 2.3)
inventory['']    # <- Pycharm can't offer any suggestions! 

对此有任何解决方法或解决方案吗?我已经搜索过类似的解决方案,但没有找到任何有效的方法。我知道我可以将它转换成 class Inventory 并以这种方式访问​​属性,但我不想这样做有几个原因:

任何有关如何让我的 IDE 通过识别此类 dict 对象中的可能键来协助完成代码的帮助或解决方案,我们将不胜感激!

PyCharm 不知道 dict 包含什么,因为它的键和值是在运行时表示的。所以你必须事先以某种方式暗示 PyCharm 关于 dict 的键。 Prodict 正是这样做来提示 PyCharm,所以你得到代码完成。

class Inventory(Prodict):
    name: str
    price: float


def get_inventory(name: str, price: float):
    return Inventory(name=name, price=price)


inventory = get_inventory('hammer', 2.3)
print(inventory.name)
print(inventory.price)

在上面的代码中,nameprice 属性都是自动完成的。

由于 Prodict 直接来自 dict,因此您可以将其用作常规 dict

这是说明代码完成的 Prodict 存储库的屏幕截图:

PS: 我是Prodict的作者