Почему pycharm предлагает изменить метод на статический

В новом выпуске pycharm (версия 3.1.3 community) предлагается преобразовать методы, которые не работают с состоянием текущего объекта, в static.

введите описание изображения здесь

Какова практическая причина этого? Какая-то микро-производительность (-или-память) -оптимизация?

7 Solutions collect form web for “Почему pycharm предлагает изменить метод на статический”

PyCharm «думает», что вы, возможно, хотели иметь статический метод, но вы забыли объявить его статичным.

PyCharm предлагает это, потому что метод не использует self в своем теле и, следовательно, фактически не изменяет экземпляр класса . Следовательно, метод может быть статическим, то есть вызываемым без создания экземпляра класса раньше.

Согласовано с @jolvi, @ArundasR и другими, предупреждение происходит от функции-члена, которая не использует self .

Обход проблемы: если вы уверены, что PyCharm ошибается, функция не должна быть @staticmethod , и если вы оцениваете нулевые предупреждения, вы можете сделать это:

 def bar(self): self.is_not_used() doing_something_without_self() def is_not_used(self): pass 

Приложение, которое у меня было для этого (причина, по которой я не мог использовать @staticmethod), заключалась в создании таблицы обработчиков для ответа на поле подтипа протокола. Все обработчики должны быть одинаковой формы (статические или нестатические). Но некоторым не удалось ничего сделать с этим экземпляром. Если бы я сделал эти статические, я бы получил «TypeError: объект staticmethod» не может быть вызван ».

В поддержку беспокойства OP, предлагая вам добавить staticmethod всякий раз, когда вы можете, идет вразрез с принципом, что легче сделать код менее ограничительным позже, чем сделать его более важным – сделать метод static делает его менее ограничительным, поскольку вы можете вызовите class.f () вместо instance.f ().

Угадывает, почему это предупреждение существует:

  • Он рекламирует staticmethod . Это заставляет разработчиков осознавать то, что они могли бы намереваться.
  • Как указывает JohnWorrall, это привлекает ваше внимание, когда я был случайно оставлен вне функции.
  • Это река для переосмысления объектной модели; возможно, функция вообще не принадлежит этому классу.

Я могу представить себе следующие преимущества наличия метода класса, определенного как статический:

  • вы можете вызвать метод, просто используя имя класса, не нужно его создавать.

остающиеся преимущества, вероятно, незначительны, если они присутствуют вообще:

  • может работать немного быстрее
  • сохранить немного памяти

Это сообщение об ошибке просто помогло мне в кучу, так как я не понял, что случайно написал свою функцию, используя свой пример для тестирования

 my_player.attributes[item] 

вместо правильного пути

 self.attributes[item] 

Поскольку вы не ссылались на « self в теле метода bar , PyCharm спрашивает, может ли вы сделать статический bar . В других языках программирования, таких как Java, есть очевидные причины для объявления статического метода. В Python единственное реальное преимущество статического метода (AFIK) можно назвать без экземпляра класса. Однако, если это ваша единственная причина, вам, вероятно, лучше идти с функцией верхнего уровня, как здесь .

Короче говоря, я не на сто процентов уверен, почему он там. Я предполагаю, что они, вероятно, удалят его в предстоящем выпуске.

Я думаю, что причиной этого предупреждения является конфигурация в Pycharm. Вы можете снять отметку с выбора. Метод может быть статичным в редакторе-> Осмотр

Я согласен с приведенными здесь ответами (метод не использует self и поэтому может быть украшен с помощью @staticmethod ).

Я хотел бы добавить, что вы, возможно, захотите перенести метод на функцию верхнего уровня вместо статического метода внутри класса. Подробнее см. Этот вопрос и принятый ответ: python – следует ли использовать статические методы или функции верхнего уровня

Перемещение метода на функцию верхнего уровня также устранит предупреждение PyCharm.

  • Абстрактный базовый класс: поднять NotImplementedError () в `__init __. Py`?
  • автоматически активировать virtualenv в окне терминала PyCharm
  • Каков наилучший способ передачи данных в pycharm?
  • Окно Tkinter автоматически закрывается после запуска программы Python в PyCharm
  • Использование virtualenv в Pycharm как Django IDE
  • Многочисленные интерпретаторы Python, используемые в одном проекте?
  • Настроить параметры командной строки pep8.py в pycharm
  • Как изменить текущий фон выделения строки в Pycharm?
  •  
    Interesting Posts for Van-Lav

    Довольно печатные физические величины с автоматическим масштабированием префиксов SI

    search_field по выбору поля

    Ограничение процесса пула многопроцессорности Python

    Индексы элементов в массиве Numpy, которые удовлетворяют условиям для значения и индекса

    Получение данных с использованием Python & lxml

    Как преобразовать список словарей в словарь списков в Python?

    Как установить virtualenv без использования sudo?

    Как вы используете: isalnum, isdigit, isupper для проверки каждого символа строки?

    Python, записывая целое число в файл .txt

    Закруглите список чисел на Python и сохраните сумму

    Как использовать скрипт для запроса базы данных sqlite для Android

    Можно ли использовать таблицу в базе данных, если она не является моделью Django?

    Добавление ожидания для элемента при выполнении SplashRequest в python Scrapy

    Чтение изображения .JPG и сохранение его без изменения размера файла

    Unpickling объект python 2 с python 3

    Python - лучший язык программирования в мире.