Роль self в классе
Объясните, пожалуйста, простым и доступным способом роль self в классе. Общее понимание есть, но какое-то размытое.
Ответы (4 шт):
Представьте, что Вы рассказываете другому человеку (или даже самому себе) о каких-то событиях, в которых Вы принимали участие. Как Вы себя будете называть? self
self - это обращение к самому экземпляру класса. То есть, если вы хотите объявить переменную x в классе, нужно использовать self.x = ... . (также, переменная в классе называется свойством). Если не использовать self, то x будет локальной и потом вы не сможете к ней обратиться.
Кортеж (tuple) - то же, что список (list), но его нельзя изменять после объявления (у него просто нет таких методов).
На примере понять проще всего:
class Counter:
def __init__(self, start):
self.x = start
self.self = self # сохраним self в свойстве объекта, чтобы происпектировать его позже
def increment(that): # Это просто аргумент функции, просто принято использовать self
that.x += 1
a = Counter(2) # вызываем __init__ чтобы создать объект, передаём start=2
print(a.x) # 2
a.increment()
a.increment()
print(a.x) # 4
print(a, a.self) # <__main__.Counter object at 0x7f83f92e86a0> <__main__.Counter object at 0x7f83f92e86a0>
print(a.self is a) # True Т.е. self - это имя привязанное к самому объекту
print(a.self.self.self.x) # 4
Список - изменяемый (мутируемый) тип данных:
list = [1, 2, 3]
list[0] = 4 # можно изменить любой элемент списка
print(list) # [4, 2, 3]
Кортеж - не изменяемый (не мутируемый) тип данных:
tuple = (1, 2, 3)
tuple[0] = 4 # TypeError: 'tuple' object does not support item assignment
Преимущество кортежа - скорость работы в сравнении со списком.