@MrKrot

Python: Почему результат этого кода [1], а не []?

class Foo:
      var = []
a = Foo()
b = Foo()
a.var.append(1)
print(b.var) # => [1]


По идее var - атрибут класса, мы создаем 2 объекта a и b, а дальше к атрибуту объекта а добавляем 1, но var у b мы никак не меняем. Тогда почему выводит [1], а не []?
  • Вопрос задан
  • 322 просмотра
Решения вопроса 1
aRegius
@aRegius
Python Enthusiast
Потому что вы используете атрибут класса. А атрибуты классов совместно используются всеми экземплярами. А вот атрибуты экземпляров уникальны для каждого экземпляра:
>>> class M:
	    data = []
	    def __init__(self, value):
		    self.value = value

>>> x = M(1)
>>> y = M(2)
>>> x.value
1
>>> y.value
2
>>> x.data
[]
>>> y.data
[]
>>> x.data.append(10)
>>> x.data
[10]
>>> y.data
[10]
>>> x.value += 10
>>> x.value
11
>>> y.value
2
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
У Вас в классе не хватает конструкта, который необходим для создания экземпляра класса. Если сделать, например, так:
class Foo:
	var = []
	def __init__(self):
		self.var = []

a = Foo()
b = Foo()
a.var.append(1)
print(a.var, b.var)


То всё прекрасно заработает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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