Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpAdPBR 26 of 174 menu
◀ ▶

Передача объектов в функцию в ООП в 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. Проверьте то, что обе переменные указывают на один и тот же объект.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить