В тази статия ще разгледаме основните разлика между метода на класа срещу статичен метод в 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 така че използваме класови методи за създаване на фабрични методи. В примера по-долу използваме метод на клас, за да създадем обект на човек от годината на раждане.
Както беше обяснено по-горе, ние използваме статични методи за създаване на помощни функции. В примера по-долу използваме статичен метод, за да проверим дали дадено лице е възрастен или не.
тримесечие в бизнеса
Един прост пример:
клас метод:
Pythonclass 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
Статичен метод: -
Pythonclass 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)
Създаване на тест