Предупреждение: Ожидаемый тип [Имя класса], вместо него получено Dict [str, int]. - PullRequest
1 голос
/ 12 октября 2019

Я создаю класс с методами, которые принимают словари в качестве входных данных, но Pycharm отображает предупреждение.

'' 'Ожидаемый тип' TestClass ', вместо него получен Dict [str, int]' .. . (⌘F1) Информация проверки: эта проверка обнаруживает ошибки типа в выражениях вызова функции. Из-за динамического распределения и типизации утки это возможно в ограниченном, но полезном количестве случаев. Типы параметров функции могут быть указаны в строках документации или в аннотациях функций Python 3 '' '

class TestClass:
    def __getitem__(self, index):
        return self[index]

    def get_keys(self):
        return list(self.keys())


dict_input = {'a':123, 'b':456}
TestClass.get_keys(dict_input)

Так что я получаю предупреждение здесь:

TestClass.get_keys (dict_input)

Что означает это предупреждение и как его исправить?

Ответы [ 2 ]

2 голосов
/ 12 октября 2019

Такой метод, как тот, который вы написали, называется «методом экземпляра».

self, получатель должен быть экземпляром TestClass (в противном случае многие вещи могут работать неправильно, например,как super).

Вы можете определить get_keys как статический метод или использовать простую функцию (без помещения ее в класс).

class TestClass:
    @staticmethod
    def get_keys(s):
        return list(s.keys())

Возможно, вы захотитепрочтите документацию Python о классах для получения более подробной информации.

0 голосов
/ 13 октября 2019

Чтобы конкретно ответить на ваш вопрос о предупреждении Pycharm, в настоящее время вы сталкиваетесь с предупреждением известной проблемы , вызванным проверкой Pycharm на наличие типов в коде, поскольку PyCharm сбит с толку, поскольку ожидает TestClassобъект, но получает объект словарь вместо.

Один из способов справиться с этим - отключить этот конкретный тип предупреждения, как это можно перефразировать с здесь

  1. Перейти к настройкам / настройкам
  2. На боковой панели щелкните Инспекции
  3. Разверните вкладку Python
  4. Прокрутите вниз до Incorrect Call Arguments и снимите флажок
  5. Если это не сработает, вместо этого вы можете снять флажок Type Checker.

Еще один более элегантный метод, хотя я не уверен, разрешит ли это предупреждение PyCharm, - это добавить декоратор в вашу функцию, чтобы PyCharm знал, что ваш возвращаемый тип являетсяДИКТ. Учебное пособие - здесь , но ваша строка документации, вероятно, будет включать это:

"""
:rtype: Dict [str,int]
"""

Кроме того, вы, вероятно, должны использовать декоратор @staticmethod в функции get_keys, так какупомянуто Жаном, поскольку он принимает объект и возвращает его ключи (и мы не хотим, чтобы этот объект обращался к нашим данным TestClass в процессе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...