classmethod()
Функция classmethod() в Python используется для определения методов класса (class methods).
Назначение: Основная цель функции classmethod() - создать метод класса, который принимает в качестве первого аргумента класс, а не экземпляр класса. Методы класса могут вызываться как на уровне класса, так и на уровне экземпляра, но они работают с классом в целом, а не с конкретным экземпляром.
Что возвращает: Функция classmethod() возвращает объект метода класса, связанный с переданной функцией.
Описание: Синтаксис функции classmethod() следующий: classmethod(function), где function - функция, которая будет преобразована в метод класса.
Методы класса часто используются для создания альтернативных конструкторов (методов создания экземпляров), а также для определения операций, связанных с классом в целом, а не с конкретным экземпляром.
Примеры использования:
Создание альтернативного конструктора
Создание метода класса для операций с классом
Использование метода класса для проверки типа
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
@classmethod
def from_string(cls, person_str):
name, age = person_str.split(",")
return cls(name, int(age))
person = Person.from_string("John,30")
print(person.name) # Выведет "John"
print(person.age) # Выведет 30class Circle:
pi = 3.14159
def __init__(self, radius):
self.radius = radius
@classmethod
def get_pi(cls):
return cls.pi
@classmethod
def create_unit_circle(cls):
return cls(1)
unit_circle = Circle.create_unit_circle()
print(unit_circle.radius) # Выведет 1
print(Circle.get_pi()) # Выведет 3.14159class Vector2D:
def __init__(self, x, y):
self.x = x
self.y = y
@classmethod
def from_vector(cls, vector):
if isinstance(vector, cls):
return vector
else:
raise TypeError("Argument must be a Vector2D instance")
v1 = Vector2D(1, 2)
v2 = Vector2D.from_vector(v1)
print(v2.x, v2.y) # Выведет 1 2Методы класса часто используются для создания альтернативных конструкторов, когда необходимо создавать экземпляры класса из различных источников данных (строк, файлов, других объектов). Они также полезны для определения операций, связанных с классом в целом, таких как получение или изменение статических атрибутов класса.
Последнее обновление