You are currently viewing Метод класса против статического метода в Python

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

Метод класса

Декоратор @classmethod — это встроенный декоратор функций, представляющий собой выражение, которое вычисляется после определения вашей функции. Результат этой оценки затеняет определение вашей функции.
Метод класса получает класс в качестве неявного первого аргумента, точно так же, как метод экземпляра получает синтаксис экземпляра:

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.
  • Метод класса-это метод, который привязан к классу, а не к объекту класса.
  • У них есть доступ к состоянию класса, поскольку он принимает параметр класса, указывающий на класс, а не на экземпляр объекта.
  • Он может изменять состояние класса, которое будет применяться ко всем экземплярам класса. Например, он может изменить переменную класса, которая будет применима ко всем экземплярам.

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

Статический метод не получает неявный первый аргумент.

Синтаксис:

class C(object):
 @staticmethod
 def fun(arg1, arg2, ...):
 ...
returns: a static method for function fun.
  • Статический метод-это также метод, который привязан к классу, а не к объекту класса.
  • Статический метод не может получить доступ к состоянию класса или изменить его.
  • Он присутствует в классе, потому что имеет смысл, чтобы метод присутствовал в классе.

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

  • Метод класса принимает cls в качестве первого параметра, в то время как статическому методу не нужны конкретные параметры.
  • Метод класса может получить доступ или изменить состояние класса, в то время как статический метод не может получить доступ или изменить его.
  • Как правило, статические методы ничего не знают о состоянии класса. Это методы утилитарного типа, которые принимают некоторые параметры и работают с этими параметрами. С другой стороны, методы класса должны иметь класс в качестве параметра.
  • Мы используем @classmethod декоратор в python для создания метода класса, и мы используем @staticmethod декоратор для создания статического метода в python.

Когда что использовать?

  • Обычно мы используем метод класса для создания заводских методов. Заводские методы возвращают объекты класса ( аналогичные конструктору ) для различных вариантов использования.
  • Обычно мы используем статические методы для создания служебных функций.

Как определить метод класса и статический метод?

Для определения метода класса в python мы используем @classmethod decorator, а для определения статического метода мы используем @staticmethod decorator.
Давайте рассмотрим пример, чтобы понять разницу между ними обоими. Допустим, мы хотим создать классного человека. Теперь python не поддерживает перегрузку методов, таких как C++ или Java, поэтому мы используем методы классов для создания заводских методов. В приведенном ниже примере мы используем метод класса для создания объекта person с года рождения.
Как объяснялось выше, мы используем статические методы для создания служебных функций. В приведенном ниже примере мы используем статический метод, чтобы проверить, является ли человек взрослым или нет.

Реализация

# 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