Я использую 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
и таким образом получить доступ к свойствам, но я не хочу этого делать по нескольким причинам:
dict
являются самыми простыми для этой цели.Любая помощь или решение о том, как я могу заставить свою IDE помогать в завершении кода, распознавая возможные ключи в таком объекте dict
, были бы очень признательны!
это предлагаемое решение ничего не делает для меня ... даже если этот параметр отмечен, когда я создаю код и пытаюсь получить доступ из объекта dict по ключу, я все равно получаю вывод `` Нет предложений '', и мне все равно придется вручную войдите в него.
вы всегда можете попробовать другие IDE, такие как Visual Studio
Вы можете использовать JSON с большинством объектов (определяемого пользователем типа) так же легко, как и с dict
- просто вызовите vars
, чтобы получить dict, возможно, в сочетании с dict.update
.
PyCharm не знает, что содержит dict
, потому что его ключи и значения обозначаются во время выполнения. Поэтому вам нужно как-то заранее намекнуть PyCharm о ключах dict
. Продикт делает именно это, чтобы намекнуть 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: Я автор Продикта.
Отличный инструмент. Я думаю, было бы полезно заранее сообщить другим, что именно заставляет IDE знать о dict. Это переопределенный метод __dir__
или что-то в этом роде и где он находится в вашем коде?
@PhaniRithvij потребуется слишком много места, чтобы объяснить, как это работает. Код находится в ссылке github за именем пакета Prodict (github.com/ramazanpolat/prodict)