我正在将 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)
在上面的代码中,name
和 price
属性都是自动完成的。
由于 Prodict 直接派生自 dict
,因此您可以将其用作常规 dict
。
这是说明代码完成的 Prodict 存储库的屏幕截图:
PS:我是Prodict的作者。
关于python - 如何从 Python 中的方法启用字典的代码完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318992/