# classmethod()

Функция `classmethod()` в Python используется для определения методов класса (class methods).

**Назначение**: Основная цель функции `classmethod()` - создать метод класса, который принимает в качестве первого аргумента класс, а не экземпляр класса. Методы класса могут вызываться как на уровне класса, так и на уровне экземпляра, но они работают с классом в целом, а не с конкретным экземпляром.

**Что возвращает**: Функция `classmethod()` возвращает объект метода класса, связанный с переданной функцией.

**Описание**: Синтаксис функции `classmethod()` следующий: `classmethod(function)`, где `function` - функция, которая будет преобразована в метод класса.

Методы класса часто используются для создания альтернативных конструкторов (методов создания экземпляров), а также для определения операций, связанных с классом в целом, а не с конкретным экземпляром.

**Примеры использования**:

1. Создание альтернативного конструктора
2. Создание метода класса для операций с классом
3. Использование метода класса для проверки типа

{% tabs %}
{% tab title="1." %}

```python
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)  # Выведет 30
```

{% endtab %}

{% tab title="2." %}

```python
class 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.14159
```

{% endtab %}

{% tab title="3." %}

```python
class 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
```

{% endtab %}
{% endtabs %}

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