@zlodiak

Как работают разделяемые ссылки в классах?

Из одного класса я создаю два объекта так

class qw:
	a = [1, 2]

x = qw()
y = qw()

print(x.a, y.a)

x.a = x.a.append(3)

print(x.a, y.a)


В результате выполнения, получаю следующий вывод

[1, 2] [1, 2]
None [1, 2, 3]


Объясните пожалуйста почему выводится None, а затем результат успешного добавления?

Я понимаю так.
1. x, y это два отдельных объекта, созданных на основе общего класса
2. x, y это не примитивные классы типа '1' или 'a'. следовательно в случае разделяемых ссылок переменные, на них ссылающиеся, должны быть связаны таким образом, что при изменении одного списка, должен изменяться и второй тоже
  • Вопрос задан
  • 344 просмотра
Решения вопроса 1
@chyngys_94
middle-class developer
Сперва надо добавить элемент в список, потом "присваивать". Так как append метод, x.a получает его возвращаемое значение, строго типизированный язык вызвал бы ошибку из за того что append ничего не возвращает, но у python все нормально "присваивается". Впрочем Roman Kitaev все верно сказал.
Но если ты хочешь писать код таким образом, могу обрадовать, в python 3.8 появиться синтаксический сахар := с ним так можно делать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@deliro
Ты не читал документацию, верно? append добавил в список тройку, которую шарят все инстансы класса, но append возвращает ничего. И это ничего ты и присваиваешь
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы