如何从 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
并以这种方式访问属性,但我不想这样做有几个原因:
- 我需要对象可以轻松 JSON 转换,因为我可能会经常将它从/传递到 JSON,而
dict
对象最容易实现此目的
- 将它存储为 class 没有多大意义,因为无论如何我只需要它作为数据容器,其中存储的属性最少
任何有关如何让我的 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 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
并以这种方式访问属性,但我不想这样做有几个原因:
- 我需要对象可以轻松 JSON 转换,因为我可能会经常将它从/传递到 JSON,而
dict
对象最容易实现此目的 - 将它存储为 class 没有多大意义,因为无论如何我只需要它作为数据容器,其中存储的属性最少
任何有关如何让我的 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的作者