аватар question@mail.ru · 01.01.1970 03:00

Зачем в питоне нужен @staticmethod

Есть класс printer. У него есть 2 метода, делающие одно и то же. Различие в том, что один из методов - с декоратором @staticmethod, а другой - без. Но я могу вызывать оба метода без создания экземпляра класса.

class printer():    ''' Тест @staticmethod '''    def not_static_print(self, text = 'Example Text'):        print(text)    @staticmethod    def static_print(text = 'Example Text'):        print(text)# Не создаю никаких экземпляровprinter.not_static_print(None, 'Emm?')printer.static_print('Something like this.')

Просто для not_static_print() я указываю экземпляр, а точнее его отсутствие (None)

Есть ли принципиальная разница в использовании этих методов?

аватар answer@mail.ru · 01.01.1970 03:00

@staticmethod используется в том случае, когда ваш метод не имеет никакого доступа к тому, что представляет собой класс или объект класса. Он не принимает никаких обязательных аргументов, по типу объекта класса или самого класса.

В первом Вашем методе передается параметр self, который может быть использован далее в коде(хоть вы его и не используете), в варианте с @staticmethod обратиться к классу либо же объекту не выйдет никак. Вызывается он так же, как и обычный метод.

Более подробно можно почитать тут:

Последние

Похожие