Передача объектов в функцию в ООП в Python
Пусть у нас дан вот такой класс User:
class User:
def __init__(self, name, age):
self.name = name
self.age = age
Пусть мы создаем объект этого класса:
user = User('john', 30)
Представьте теперь следующую ситуацию: вы
хотите значение переменной user присвоить
какой-нибудь другой переменной, например
test.
Если речь шла не об объектах, а о примитивах,
то есть о строках, числах, списках и т.п,
то в переменную test попала бы копия
значения переменной user.
Это значит, что изменения любой из переменных в дальнейшем не меняли бы значение другой переменной. Посмотрим на примере:
user = 1
test = user # в переменной test теперь 1
test = 2 # в переменной test теперь 2, а в user - по-прежнему 1
С объектами все по-другому - при записи в другую переменную объект не копируется: обе переменные указывают на один и тот же объект. Это имеет важное следствие: если поменять какие-то свойства объекта с помощью одной переменной, во второй переменной появятся эти же изменения.
Давайте посмотрим на практике. Создадим объект с юзером:
user = User('john', 30)
Присвоим объект в другую переменную:
test = user
Поменяем свойство name
в переменной test:
test.name = 'eric'
Давайте проверим, что изменился общий объект.
Выведем свойство name
из переменной user:
print(user.name) # выведет 'eric'!
Так же ведет себя передача объекта в функцию: параметр получает ссылку на тот же объект, а не его копию. Изменения свойств внутри функции видны снаружи:
def rename(user):
user.name = 'kyle'
user = User('john', 30)
rename(user)
print(user.name) # выведет 'kyle'
Сделайте класс Product, в котором
будут следующие свойства: name,
price.
Создайте объект класса Product, запишите
его в переменную product1.
Присвойте значение переменной product1
в переменную product2. Проверьте
то, что обе переменные указывают на один
и тот же объект.