Метод класу проти статичного методу в Python

У цій статті ми розглянемо основні різниця між методом класу та статичним методом в Python і коли використовувати метод класу та статичний метод в python.

Що таке метод класу в Python?

Декоратор @classmethod — це вбудований декоратор функції, який є виразом, який оцінюється після визначення вашої функції. Результат цієї оцінки затьмарює ваше визначення функції. А метод класу отримує клас як неявний перший аргумент, так само як метод екземпляра отримує екземпляр

Синтаксис методу класу Python:

 class C(object):  @classmethod  def fun(cls, arg1, arg2, ...): .... fun: function that needs to be converted into a class method returns: a class method for function. 
  • Метод класу — це метод, прив’язаний до клас а не об’єкт класу.
  • Вони мають доступ до стану класу, оскільки він приймає параметр класу, який вказує на клас, а не на екземпляр об’єкта.
  • Він може змінювати стан класу, який застосовуватиметься до всіх екземплярів класу. Наприклад, він може змінити змінну класу, яка буде застосовна до всіх екземплярів.

Що таке статичний метод у Python?

Статичний метод не отримує неявний перший аргумент. Статичний метод також є методом, який прив’язаний до класу, а не до об’єкта класу. Цей метод не може отримати доступ або змінити стан класу. Він присутній у класі, оскільки має сенс, щоб метод був присутній у класі.

Синтаксис статичний метод Python:

 class C(object):  @staticmethod  def fun(arg1, arg2, ...):  ... returns: a static method for function fun. 

Метод класу проти статичного методу

Різниця між методом Class і статичним методом:

  • Метод класу приймає cls як перший параметр, тоді як статичний метод не потребує конкретних параметрів.
  • Метод класу може отримати доступ або змінити стан класу, тоді як статичний метод не може отримати доступ або змінити його.
  • Загалом, статичні методи нічого не знають про стан класу. Це методи утилітного типу, які приймають деякі параметри та працюють з ними. З іншого боку, методи класу повинні мати клас як параметр.
  • Ми використовуємо декоратор @classmethod у python для створення методу класу, а декоратор @staticmethod — для створення статичного методу в python.

Коли використовувати клас чи статичний метод?

  • Зазвичай ми використовуємо метод класу для створення фабричних методів. Фабричні методи повертають об’єкти класу (подібні до конструктора) для різних випадків використання.
  • Зазвичай ми використовуємо статичні методи для створення службових функцій.

Як визначити метод класу та статичний метод?

Щоб визначити метод класу в Python, ми використовуємо декоратор @classmethod, а щоб визначити статичний метод, ми використовуємо декоратор @staticmethod.
Давайте розглянемо приклад, щоб зрозуміти різницю між ними. Скажімо, ми хочемо створити клас Person. Тепер Python не підтримує перевантаження методів, як C++ або Java, тому ми використовуємо методи класу для створення методів фабрики. У наведеному нижче прикладі ми використовуємо метод класу для створення об’єкта людини з роком народження.

Як пояснювалося вище, ми використовуємо статичні методи для створення службових функцій. У наведеному нижче прикладі ми використовуємо статичний метод, щоб перевірити, чи є особа дорослою чи ні.

Один простий приклад:

метод класу:

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > def> get_value(> self> ):> > return> self> .value> # Create an instance of MyClass> obj> => MyClass(> 10> )> # Call the get_value method on the instance> print> (obj.get_value())> # Output: 10>

Вихід

10 

Статичний метод: -

Python3




class> MyClass:> > def> __init__(> self> , value):> > self> .value> => value> > @staticmethod> > def> get_max_value(x, y):> > return> max> (x, y)> # Create an instance of MyClass> obj> => MyClass(> 10> )> print> (MyClass.get_max_value(> 20> ,> 30> ))> print> (obj.get_max_value(> 20> ,> 30> ))>

Вихід

30 30 

Нижче наведено повну реалізацію

Python3




# Python program to demonstrate> # use of class method and static method.> from> datetime> import> date> class> Person:> > def> __init__(> self> , name, age):> > self> .name> => name> > self> .age> => age> > # a class method to create a Person object by birth year.> > @classmethod> > def> fromBirthYear(> cls> , name, year):> > return> cls> (name, date.today().year> -> year)> > # a static method to check if a Person is adult or not.> > @staticmethod> > def> isAdult(age):> > return> age>> 18> person1> => Person(> 'mayank'> ,> 21> )> person2> => Person.fromBirthYear(> 'mayank'> ,> 1996> )> print> (person1.age)> print> (person2.age)> # print the result> print> (Person.isAdult(> 22> ))>

Вихід:

21 25 True 

Допоміжний простір: О(1)