self
и cls
соответственно. self
) имеет доступ к данным экземпляра и может вызывать методы класса (через ClassName.class_method()
или self.__class__.class_method()
). При этом он может использовать значения экземпляра для передачи в метод класса. cls
) имеет доступ к состоянию класса, но не к состоянию конкретного экземпляра напрямую. Он может создавать экземпляры класса (через cls(...)
) и вызывать методы экземпляра, но для этого ему необходим экземпляр. Чтобы получить экземпляр внутри метода класса, нужно его создать или передать существующий.
В Python методы экземпляра и методы класса взаимодействуют через контекст, в котором они вызываются и через атрибуты класса и экземпляра. Важно понимать их различия и как они могут быть использованы совместно:
Метод экземпляра (Instance Method):
Метод класса (Class Method):
Взаимодействие:
Пример:
class MyClass:
count = 0 # Атрибут класса
def __init__(self, name):
self.name = name
MyClass.count += 1 # Изменение атрибута класса в методе экземпляра
def instance_method(self):
print(f"Привет, я {self.name}, и я экземпляр. Всего экземпляров: {MyClass.count}")
MyClass.class_method() # Вызов метода класса
@classmethod
def class_method(cls):
print(f"Я метод класса {cls.__name__}. Всего экземпляров: {cls.count}")
new_instance = cls("NewInstanceFromClassMethod") # Создание экземпляра
new_instance.instance_method() # Вызов метода экземпляра
return new_instance
# Использование
my_object = MyClass("Первый экземпляр")
my_object.instance_method()
MyClass.class_method() # Вызов метода класса напрямую
В этом примере метод экземпляра `instance_method` вызывает метод класса `class_method`, а метод класса создает новый экземпляр и вызывает его метод `instance_method`, демонстрируя несколько способов взаимодействия.