Страницы

Поиск по вопросам

воскресенье, 22 декабря 2019 г.

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

#python #python_3x #ооп #классы #static


Есть класс 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)

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


Ответы

Ответ 1



@staticmethod используется в том случае, когда ваш метод не имеет никакого доступа к тому, что представляет собой класс или объект класса. Он не принимает никаких обязательных аргументов, по типу объекта класса или самого класса. В первом Вашем методе передается параметр self, который может быть использован далее в коде(хоть вы его и не используете), в варианте с @staticmethod обратиться к классу либо же объекту не выйдет никак. Вызывается он так же, как и обычный метод. Более подробно можно почитать тут: https://www.programiz.com/python-programming/methods/built-in/staticmethod

Комментариев нет:

Отправить комментарий