Рубрики
Без рубрики

Статические методы – это особые случаи методов классов. Они связаны с классом, а не экземпляром, поэтому они независимы в состоянии любого экземпляра. Встроенная функция Python StaticMethod () префиксов определения метода как аннотация @staticmethod. Эта аннотация преобразует нормальный метод экземпляра в статический метод. Разница между статическими (классовыми) методами и экземпляром … Python StaticMethod () Подробнее »

Статические методы – это особые случаи методов классов. Они связаны с классом, а не экземпляром, поэтому они независимы в состоянии любого экземпляра. Встроенная функция Python StaticMethod () префиксов определения метода как аннотация @staticmethod. Эта аннотация преобразует нормальный метод экземпляра в статический метод. Разница между статическими (классовыми) методами и экземпляром … Python StaticMethod () Подробнее »

Автор оригинала: Chris.

Статические методы – это особые случаи методов классов. Они связаны с классом, а не экземпляром, поэтому они независимы в состоянии любого экземпляра. Встроенная функция 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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.