#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
Комментариев нет:
Отправить комментарий