rdifb0
@rdifb0
Программист, реалист

Почему словарь как аттрибут не уникален?

class SomeClass:
    attr_dic = {'a': 1, 'b': 2}

some_a = SomeClass()
some_b = SomeClass()

some_a.attr_dic['a'] = 3
some_b.attr_dic['b'] = 4

print some_a.attr_dic
print some_b.attr_dic

Данный код выводит
{'a': 3, 'b': 4}
{'a': 3, 'b': 4}

Как сделать чтобы словарь был уникальный, ткните в документацию.
  • Вопрос задан
  • 2444 просмотра
Решения вопроса 1
mututunus
@mututunus
Backend developer (Python, Golang)
class SomeClass:
    def __init__(self):
        self.attr_dic = {'a': 1, 'b': 2}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@lPolar
data scientist
Мне кажется, что в данном случае переменная attr_dic, определенная в классе SomeClass при использовании этого класса остается общей для всех объектов этого класса (коряво написанный, но показательный пример на python 3):
class SomeClass:
    attr_dic = {'a': 1, 'b': 2}
class OtherClass:
    def __init__(self):
        self.attr_dic={'a':1,'b':2}
some_a = SomeClass()
some_b = SomeClass()
print('some_a adress %i'%id(some_a)) #выведет 204146672
print('some_b adress %i'%id(some_b)) # выведет 204148720
print('some_a dict adress %i'%id(some_a.attr_dic)) # 204166128
print('some_b dict adress %i'%id(some_b.attr_dic)) # 204166128
other_a = OtherClass() 
other_b = OtherClass()
print('other_a adress %i'%id(other_a)) #204145392
print('other_b adress %i'%id(other_b)) #204148592
print('other_a dict adress %i'%id(other_a.attr_dic)) #204165448
print('other_b dict adress %i'%id(other_b.attr_dic)) #204115000
Ответ написан
@bromzh
Drugs-driven development
Потому что надо литературу читать. Ты объявляешь классовую переменную. Она будет общей для всех экземпляров твоего класса. И используются они, например, для хранения информации, необходимой всем экземплярам.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы