首页 > 解决方案 > 如何从 Python 中的方法为字典启用代码完成?

问题描述

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

例如,我创建并尝试访问一个简单的字典对象,如下所示:

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

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

但是,如果我尝试将其构建为返回相同 dict 对象的实用程序函数,例如使用用户提供但具有相同 dict 键的值 - 那么我不再获得代码完成!

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! 

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

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

标签: pythonpython-3.xautocompletepycharmcode-completion

解决方案


PyCharm 不知道 adict包含什么,因为它的键和值是在运行时表示的。dict因此,您必须事先以某种方式提示 PyCharm 的键。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的作者。


推荐阅读