Функция Python classmethod()
classmethod()Это встроенная функция в Python, используемая для преобразования метода в метод класса.
Метод класса — это метод, который принадлежит классу, а не экземпляру; его первый параметр — сам класс (обычно называется cls). Методы класса могут получать доступ к атрибутам класса, но не могут получать доступ к атрибутам экземпляра.
Определения слов: classmethod 是 class method(类方法)的缩写。
Базовый синтаксис и параметры
Формат синтаксиса
classmethod(function)
Описание параметра
- Параметр function:
- Тип: объект функции
- Описание: функция, которую нужно преобразовать в метод класса.
Описание функций
- Возвращаемое значение: Возвращает объект метода класса.
- Особенности: Первый параметр — это сам класс (cls), а не экземпляр (self).
Примеры
Пример 1: Базовое использование
Пример
class MyClass:
class_attr = 0
@classmethod
def increment(cls):
cls.class_attr += 1
return cls.class_attr
@classmethod
def get_count(cls):
return cls.class_attr
# Вызывается через класс (создание экземпляра не требуется)
print(MyClass.increment()) # Вывод: 1
print(MyClass.increment()) # Вывод: 2
print(MyClass.get_count()) # Вывод: 2
# Также можно вызвать через экземпляр (но так делают редко)
obj = MyClass()
print(obj.increment()) # Вывод: 3
class_attr = 0
@classmethod
def increment(cls):
cls.class_attr += 1
return cls.class_attr
@classmethod
def get_count(cls):
return cls.class_attr
# Вызывается через класс (создание экземпляра не требуется)
print(MyClass.increment()) # Вывод: 1
print(MyClass.increment()) # Вывод: 2
print(MyClass.get_count()) # Вывод: 2
# Также можно вызвать через экземпляр (но так делают редко)
obj = MyClass()
print(obj.increment()) # Вывод: 3
Ожидаемый вывод:
1 2 2 3
Пояснение кода:
- Методы класса определяются с помощью декоратора @classmethod.
- Первый параметр — cls, который представляет сам класс.
Пример 2: Фабричный метод
Пример
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_dict(cls, data):
"""Создать объект из словаря"""
return cls(data['name'], data['age'])
@classmethod
def from_string(cls, s):
"""Создать объект из строки (формат: name-age)"""
name, age = s.split('-')
return cls(name, int(age))
def __str__(self):
return f"{self.name}, {self.age} лет"
# Паттерн «Фабрика» с использованием методов класса
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
p2 = Person.from_string("Jerry-25")
print(p1) # Вывод: Tom, 20 лет
print(p2) # Вывод: Jerry, 25 лет
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_dict(cls, data):
"""Создать объект из словаря"""
return cls(data['name'], data['age'])
@classmethod
def from_string(cls, s):
"""Создать объект из строки (формат: name-age)"""
name, age = s.split('-')
return cls(name, int(age))
def __str__(self):
return f"{self.name}, {self.age} лет"
# Паттерн «Фабрика» с использованием методов класса
p1 = Person.from_dict({'name': 'Tom', 'age': 20})
p2 = Person.from_string("Jerry-25")
print(p1) # Вывод: Tom, 20 лет
print(p2) # Вывод: Jerry, 25 лет
Ожидаемый вывод:
Tom, 20岁 Jerry, 25岁
Методы класса обычно используются для реализации фабричных методов создания объектов из различных источников данных.
Другие расширения
Встроенные функции Python3