Статические методы – это особые случаи методов классов. Они связаны с классом, а не экземпляром, поэтому они независимы в состоянии любого экземпляра. Встроенная функция Python StaticMethod
()
префиксы определения метода как аннотация @staticmethod
Отказ Эта аннотация преобразует нормальный метод экземпляра в статический метод. Разница между статическими (классами) методами и методами экземпляра состоит в том, что они не требуют отзыва в следующем.
В этом руководстве я покажу вам один из малоизвестных секретов Python, который отделяет промежуточные соединения от экспертов: Статические методы Отказ Статический метод – это особый случай C Лас Метод Отказ Вы можете знать разницу между Метод экземпляра и метод класса концептуально. (Если вы этого не сделаете, этот учебник для вас.) Но вы также знаете, как создать статический метод в Python?
Если нет, прочитайте, потому что этот учебник покажет вам!
Синтаксис статический метод
Syntax: staticmethod(function) # <--- This is considered unpythonic @staticmethod # <--- As a prefix before the used method
Вы можете объявить статический метод – это следующий синтаксис декоратора – это самый питонический способ:
class C: @staticmethod def f(arg1, arg2, ...): None C.f(arg1, arg2, ...)
Как вызвать статический метод?
Есть два способа позвонить статическому методу:
- Вы можете назвать это на таком классе, как
C.F (ARG1, ARG2, ...)
, или же - Вы можете назвать это на таких экземплярах, как
C (). F (arg1, arg2, ...)
Отказ
В отличие от метода класса, Python не вступает в неявно, передает ссылку на саму класс в качестве первого аргумента.
Статический метод приложения – заводской шаблон
Вы можете использовать статический метод, чтобы позволить людям создавать разные варианты Кофе
класс:
class Coffee: def __init__(self, milk, beans): self.milk = milk # percentage self.coffee = 100-milk # percentage self.beans = beans def __repr__(self): return f'Milk={self.milk}% Coffee={self.coffee}% Beans={self.beans}' @staticmethod def cappuccino(): return Coffee(80, 'Arrabica') @staticmethod def espresso_macchiato(): return Coffee(30, 'Robusta') @staticmethod def latte(): return Coffee(95, 'Arrabica') print(Coffee.cappuccino()) print(Coffee.espresso_macchiato()) print(Coffee.latte())
Это называется Фабрика шаблона : Статические методы являются фабриками экземпляра – они производят новые экземпляры в соответствии с их реализациями. Например, Coffee.Cappuccino ()
Метод создает особый тип Кофе
С начальным выбором 80% молока и гарабики бобов.
Выход этого кода-фрагмента:
Milk=80% Coffee=20% Beans=Arrabica Milk=30% Coffee=70% Beans=Robusta Milk=95% Coffee=5% Beans=Arrabica
Интерактивный пример статического метода
Следующий интерактивный код Shell позволяет играть с этим примером и углубить свои навыки.
Упражнение : Можете ли вы создать еще одну специальность кофе?
Статический метод – функциональный декоратор
Декораторы помогают добавлять функциональность к существующему коду без необходимости изменять сам код. Декораторы так называются, потому что они украшают код, они не изменяют код, но они заставляют код сделать разные вещи, используя украшение. Теперь, когда мы поняли замыкание, мы можем работать наш путь шагом к пониманию и использованию декораторов.
@staticmethod
это функциональный декоратор. Это коротко для звонка StaticMethod (M)
Для метода м
Что вы бы украшали.
Вот пример без использования декоратора и используя StaticMethod ()
вместо:
class Coffee: def __init__(self, milk, beans): self.milk = milk # percentage self.coffee = 100-milk # percentage self.beans = beans def __repr__(self): return f'Milk={self.milk}% Coffee={self.coffee}% Beans={self.beans}' def cappuccino(): return Coffee(80, 'Arrabica') cappuccino = staticmethod(cappuccino) print(Coffee.cappuccino())
Вывод одинаково:
Milk=80% Coffee=20% Beans=Arrabica
Однако это не рекомендуемый способ использовать декоратор с аннотацией @!
Связанная статья: Декораторы
Статический метод vs Метод экземпляра
Если вы не используете @staticmethod
Аннотатор, вы получаете метод экземпляра по умолчанию. Метод экземпляра требует, чтобы первый аргумент Я
является ссылкой на само экземпляр, на котором называется метод. Статический метод не передает неявный аргумент. Таким образом, разница между статическими методами и методами экземпляра заключается в том, что Python ничего не пропускает в первом случае при прохождении экземпляра (объекта) в качестве первого неявного аргумента во втором случае.
Вот минимальный пример статического и метода экземпляра:
class C: @staticmethod def f(): print('hi') # instance method def g(self): None # call static method: C.f() # call instance method: C().g()
Статический метод против метода класса
Вы можете знать статические методы от языков программирования, таких как C ++ или Java. Это методы, которые существуют независимо от того, создали ли вы экземпляра класса. Вот почему они не используют никакой переменной экземпляра в корпусе метода. Если вы хотите использовать статический метод в Python, вам нужно использовать @staticmethod
аннотация, а не @classmethod
Аннотация. Разница состоит в том, что статические методы не ожидают от ссылки на либо экземпляр, либо в классе в качестве подразумеваемого первого аргумента.
Вот пример сравнения методов класса, методы экземпляра и статические методы:
class C: @classmethod def f(cls): None # instance method def g(self): None @staticmethod def h(): None # call class method: C.f() # call instance method: C().g() # call static method: C.h()
Статический метод VS метод класса VS метод экземпляра
Чтобы обобщить, вот разница между тремя различными типами методов:
- Статические методы,
- Методы класса, а также
- Методы экземпляра.
Определение | def f (cls, arg1, arg2): … | def f (arg1, arg2): … | def f (self, arg1, arg2): … |
Первый аргумент | Ссылка на класс | Нет ссылки | Ссылка на экземпляр |
Применение | На классе: C.F (ARG1, ARG2) | На классе: C.F (ARG1, ARG2) | Например: C (). F (arg1, arg2) |
Заявление | Работа независимо от данных экземпляра – но зависит от класса (например, фабрики). | Работа независима от данных экземпляра и данных класса (например, общие вычисления) | Работа по данным конкретного экземпляра |
Похожие видео: метод класса Python
Резюме
Статические методы – это особые случаи методов классов. Они связаны с классом, а не экземпляром, поэтому они независимы в состоянии любого экземпляра.
Встроенная функция Python StaticMethod
()
префиксы определения метода как аннотация @staticmethod
Отказ Эта аннотация преобразует нормальный метод экземпляра в статический метод.
Хотите увеличить свои навыки Python в веселой и легкой потребности? Рассмотрим следующие ресурсы и стать магистральным кодером!
Куда пойти отсюда?
Достаточно теории, давайте познакомимся!
Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?
Практические проекты – это то, как вы обостряете вашу пилу в кодировке!
Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?
Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.
Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.