python - 如何从 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
并以这种方式访问属性,但我不想这样做有几个原因:
- 我需要对象可以轻松地进行 JSON 转换,因为我可能会经常将它从 / 传递到 JSON,并且
dict
对象是最容易实现此目的的 - 将它存储为一个类没有多大意义,因为无论如何我只需要它作为数据容器,其中存储的属性最少
任何关于如何让我的 IDE 通过识别此类dict
对象中可能的键来帮助完成代码的任何帮助或解决方案将不胜感激!
解决方案
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)
在上面的代码中,name
和price
属性都是自动完成的。
由于 Prodict 是直接派生自dict
,所以你可以把它当作正则使用dict
。
这是 Prodict 存储库中说明代码完成的屏幕截图:
PS:我是Prodict的作者。
推荐阅读
- node.js - 在已部署的应用程序上播放来自 s3 的文件时的跨源资源策略问题
- python-3.x - 当我使用带有 check=True 的子进程时,如何获得错误消息
- php - 注意:尝试访问 bool 类型值的数组偏移量
- flutter - 更新 android studio 后出现错误(缺少 'x86' CPU 的模拟器引擎程序)?
- amazon-web-services - 使用 dynamoDB 订阅 GraphQL
- python - 限制 SQLite3 SELECT 查询中选择的唯一日期的数量
- java - 如何从服务器关闭之前的最后一个状态恢复弹簧状态机?
- ios - 通用 AlertViewController 适用于所有视图控制器
- html - 如何在反应中显示半透明的div?
- python - 如何按新评论对评论进行排序,并阻止我的机器人评论相同的评论?