Бля нихуя не понимаю чо происходит
class Bar:
def __init__(self, value):
print(&
#39;Bar.__init__&
#39;, value)
self.value = value
class Foo:
bar = Bar(2)
def __init__(self):
print(&
#39;Foo.__init__&
#39;)
a = Foo()
Foo.bar = Bar(4)
b = Foo()
print(a.bar is b.bar)
print(a.bar.value, b.bar.value)
чо ты хотел, это ж у тебя переменная класса, она расшарена между всеми инстансами этого класса: изменил Foo.bar на что-то - оно изменилось для всех инстансов (и уже созданных, и ещё не созданных)
@mugiseyebrows без конкретного примера кода могу только пованговать, что там ты меняешь не переменную класса, а создаёшь переменную инстанса, которая делает тебе ВАРИЕЙБЛ ШЕДОВИНГ: вместо
Foo.bar = Bar(4)
делаешьb.bar = Bar(4)
@mugiseyebrows ну, ты меня ВЫНУДИЛ. поставил этот твой пукитыч и тоже теперь нихуя не понимаю.
оператор is чекает ссылки на объекты в памяти - если переменные указывают на один и тот же адрес, значит тру; id() выводит адрес объекта в памяти; но если раз за разом пидорить id(speaker1.speak), то объект как бы "прыгает" по адресам. в то же время
id(speaker1.speak) == id(speaker2.speak)
возвращает тру стабильно, значит хоть оно и прыгает, но объект в памяти один и тот же. почему оператор is стабильно возвращает фолс - я тоже не понимаю. узнаешь - расскажи@anonymous спасибо, почти понятно //по-прежнему не понимаю, почему сравнение инстансов оператором
is
возвращалоFalse
, а сравнениеid()
тех же инстансов возвращалоTrue