Skip to content

Latest commit

 

History

History
78 lines (50 loc) · 3.26 KB

File metadata and controls

78 lines (50 loc) · 3.26 KB

🐍 Методы классов в Python: @staticmethod, @classmethod

Эта статья поможет тебе понять, чем отличаются staticmethod, classmethod и property в Python, когда их использовать и как они помогают реализовать инкапсуляцию и чистый интерфейс классов.


📘 1. @staticmethod и @classmethod

🔹 @staticmethod

  • Не принимает ни self, ни cls.
  • Это просто функция, логически принадлежащая классу.
  • Не знает ничего о классе или экземпляре.
  • Используется для утилитарных методов, не зависящих от состояния.

📌 Пример:

class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

print(MathUtils.add(2, 3))  # 5

Можно вызвать и через экземпляр:

m = MathUtils() print(m.add(2, 3)) # 5

Но он не использует m или MathUtils внутри.

🧠 Когда использовать:

  • Метод не зависит от данных экземпляра или класса.

  • Просто удобная функция внутри класса.

🔹 @classmethod

  • Принимает cls — ссылку на сам класс.

  • Может создавать экземпляры (return cls(...)), изменять атрибуты класса.

  • Полезен, когда логика связана с самим классом, а не с экземпляром.

📌 Пример:

class Person:
	def __init__(self, name):
		self.name = name
	
	@classmethodd
	def from_fullname(cls, fullname):
		name = fullname.split()[0]
		return cls(name)  # создает экземпляр 

p = Person.from_fullname("Alice Johnson") 
print(p.name) # Alice

🧠 Когда использовать:

  • Когда нужно создать экземпляр из альтернативных данных.

  • Когда метод должен работать с классом (например, менять атрибуты класса).


📊 Сравнение:

Метод Первый аргумент Имеет доступ к классу Имеет доступ к экземпляру Основное применение
@staticmethod ❌ нет ❌ нет ❌ нет Утилиты, вспомогательные методы
@classmethod ✅ cls ✅ да ❌ нет Альтернативные конструкторы, работа с классом
Обычный метод ✅ self ✅ через self.__class__ ✅ да Работа с данными экземпляра

[[Python]] [[IT]]