Что такое cls ?

Спросят с вероятностью 3%



cls — это имя, принятое по соглашению для первого параметра методов класса. Он используется аналогично тому, как self используется в методах экземпляра. В то время как self ссылается на конкретный объект (экземпляр) класса, cls ссылается на сам класс.



Методы класса



Это методы, которые получают сам класс в качестве первого аргумента. Для их создания используется декоратор @classmethod.



Рассмотрим пример:


class MyClass:

class_variable = 0



def __init__(self, value):

self.instance_variable = value



@classmethod

def class_method(cls, increment):

cls.class_variable += increment

print(f"Class variable is now {cls.class_variable}")



# Создание экземпляров

obj1 = MyClass(1)

obj2 = MyClass(2)



# Вызов метода класса

MyClass.class_method(5) # Выведет: Class variable is now 5

obj1.class_method(3) # Выведет: Class variable is now 8

obj2.class_method(2) # Выведет: Class variable is now 10




В этом примере:


Класс MyClass: имеет переменную класса class_variable и метод класса class_method.

Метод класса class_method: использует cls для доступа и изменения переменной класса.



Почему он используется



1️⃣Доступ к атрибутам класса: Методы класса могут изменять состояние класса, а не конкретного экземпляра.

2️⃣Создание альтернативных конструкторов: Часто используется для создания дополнительных способов инициализации объектов.



Пример:

class Person:

def __init__(self, name, age):

self.name = name

self.age = age



@classmethod

def from_birth_year(cls, name, birth_year):

age = 2024 - birth_year

return cls(name, age)



# Создание объектов с использованием альтернативного конструктора

person1 = Person("Alice", 30)

person2 = Person.from_birth_year("Bob", 1990)



print(person1.name, person1.age) # Выведет: Alice 30

print(person2.name, person2.age) # Выведет: Bob 34




В этом примере:

Метод класса from_birth_year использует cls для создания нового объекта Person, рассчитывая возраст на основе года рождения.



cls используется в методах класса для ссылки на сам класс. Он позволяет методам класса изменять состояние класса и создавать альтернативные конструкторы.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых