Найти - Пользователи
Полная версия: Изменение свойства экземпляра класса меняет это свойство у других
Начало » Python для новичков » Изменение свойства экземпляра класса меняет это свойство у других
1
vinchkovsky
Пишу игру на pygame (первый опыт), возник следующий вопрос.
Есть класс:
class A(object):
a = []
def __init__(self):
pass
Если так:
b = A()
c = A()
b.a += ['a']
print b.a, c.a
То вижн это:
['a'] ['a']
А если так:
b = A()
c = A()
b.a = b.a + ['a']
print b.a, c.a
То результат таков:
['a'] []
Почему так?
sypper-pit
значение c.a нет в последнем списке, а в первом примере указанно не явно ИМХО …. вообще надо тутариал перечитать
Griffon
Суть проста.

Свойство, обьявленное таким образом, создаётся ещё до того как вы создали экземпляр класса.
То есть такое свойство каждого экземпляра будет ссылаться на один и тот же обьект в памяти.

Оператор += не создаёт новый список. Это тоже самое что и вызывать метод .append(). Таким образом вы изменяете список на который ссылается свойство.
А так как свойства и других экземпляров класса ссылаются на тот же обьект в памяти, то и значение свойства так же изменится.

Просто обьявляйте свойства в конструкторе. И такого не будет происходить, так как при создании каждого экземпляра класса будет создаваться новый список.
sypper-pit
Griffon
согласен :) указание на ячейку памяти происходить не явным способом :) +1 за мнение
vinchkovsky
Спасибо за ответы, понятно ;)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB