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

标签 python python-3.x autocomplete pycharm code-completion

我正在将 Python 3.6 与 PyCharm 结合使用,令人沮丧的是不支持字典对象(具有固定键架构)的特殊情况的代码完成。

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

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

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

但是,如果我尝试将它构建为一个返回相同字典对象的实用函数,比如使用用户提供的值但使用相同的字典键 - 那么我就无法再完成代码了!

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 并以这种方式访问​​属性,但出于以下几个原因我不想这样做:

  • 我需要该对象可以轻松地转换为 JSON,因为我可能会经常将它从 JSON 传递到 JSON,而 dict 对象对于此目的来说是最简单的
  • 将它存储为一个类没有多大意义,因为无论如何我只需要它作为一个数据容器,其中存储的属性最少

对于如何让我的 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 存储库的屏幕截图:

Prodict code completion

PS:我是Prodict的作者。

关于python - 如何从 Python 中的方法启用字典的代码完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318992/

相关文章:

Python Pelican - 链接帖子

python - Python抛出IndexError:列表索引超出范围,使用CSV

python-3.x - MXNet (python3) 将残差卷积结构定义为来自 Gluon 模块的 Block

python - 使用python将csv文件上传到azure blob存储

python - 需要使用 python 替换配置文件中的相似键值

java - 在 Swing 中构建一个类似于 SO 标记的搜索模块 UI

python - 如何使用单一 RGB 颜色过滤图像?

python - 根据 Pandas 中的索引值将数据帧分成多个数据帧

Emacs 公司模式在按下空格键时插入补全

php - 如何使用 Flexsearch 进行自动完成搜索