Метод класу проти статичного методу в 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)