Best viewed with LeechCraft on Microsoft Linux. Войти !bnw Сегодня Клубы
Бля нихуя не понимаю чо происходит class Bar: def __init__(self, value): print('Bar.__init__', value) self.value = value class Foo: bar = Bar(2) def __init__(self): print('Foo.__init__') a = Foo() Foo.bar = Bar(4) b = Foo() print(a.bar is b.bar) print(a.bar.value, b.bar.value)
#KXXPWK / @mugiseyebrows / 1360 дней назад

Что не так?
#KXXPWK/IKP / @anonymous / 1359 дней назад

чо ты хотел, это ж у тебя переменная класса, она расшарена между всеми инстансами этого класса: изменил Foo.bar на что-то - оно изменилось для всех инстансов (и уже созданных, и ещё не созданных)

#KXXPWK/OQW / @anonymous / 1359 дней назад
едет ' через ' видит ' в ' ' сунул ' ' в ' '' ' '''
#KXXPWK/ZDG / @anonymous / 1359 дней назад
@anonymous чому в pyqt сигналы в виде переменных класса а работают как переменные инстанса
#KXXPWK/ZRN / @mugiseyebrows --> #KXXPWK/OQW / 1359 дней назад

@mugiseyebrows без конкретного примера кода могу только пованговать, что там ты меняешь не переменную класса, а создаёшь переменную инстанса, которая делает тебе ВАРИЕЙБЛ ШЕДОВИНГ: вместо Foo.bar = Bar(4) делаешь b.bar = Bar(4)

#KXXPWK/C88 / @anonymous --> #KXXPWK/ZRN / 1359 дней назад
теперь понимаю ещё чуть меньше from PyQt5 import QtWidgets, QtCore, QtGui from PyQt5.QtCore import Qt class Speaker(QtCore.QObject): speak = QtCore.pyqtSignal(int) class Listener(QtCore.QObject): def onSpeech(self, value): print(value) if __name__ == "__main__": app = QtWidgets.QApplication([]) speaker1 = Speaker() speaker2 = Speaker() listener = Listener() speaker1.speak.connect(listener.onSpeech) speaker1.speak.emit(1) speaker2.speak.emit(2) print(speaker1.speak is speaker2.speak) # prints False app.exec()
#KXXPWK/SDE / @mugiseyebrows / 1359 дней назад

@mugiseyebrows ну, ты меня ВЫНУДИЛ. поставил этот твой пукитыч и тоже теперь нихуя не понимаю.
оператор is чекает ссылки на объекты в памяти - если переменные указывают на один и тот же адрес, значит тру; id() выводит адрес объекта в памяти; но если раз за разом пидорить id(speaker1.speak), то объект как бы "прыгает" по адресам. в то же время id(speaker1.speak) == id(speaker2.speak) возвращает тру стабильно, значит хоть оно и прыгает, но объект в памяти один и тот же. почему оператор is стабильно возвращает фолс - я тоже не понимаю. узнаешь - расскажи

#KXXPWK/IK4 / @anonymous --> #KXXPWK/SDE / 1359 дней назад
@mugiseyebrows `QtCore.pyqtSignal` реализует протокол дескриптора, поэтому когда ты обращается к инстансу `pyqtSignal` как к атрибуту инстанса какого-то класса (в данном случае инстансу `Speaker`), ты получаешь не сам инстанс, а то, что возвращает его метод `__get__` (это может быть что угодно, так реализованы, например, связыванные методы или `@property`). https://docs.python.org/3/reference/datamodel.html#implementing-descriptors
#KXXPWK/R5N / @anonymous --> #KXXPWK/SDE / 1359 дней назад
@anonymous \*связанные
#KXXPWK/9TL / @anonymous --> #KXXPWK/R5N / 1359 дней назад
@anonymous Спасибо. Вот бы ещё понять нахуя так сложно сделано, можно же было прост через инстанс пробираться к `QObject*` и добавлять туды сигналы. В чём профит?
#KXXPWK/LJ0 / @mugiseyebrows --> #KXXPWK/R5N / 1358 дней назад

@anonymous спасибо, почти понятно //по-прежнему не понимаю, почему сравнение инстансов оператором is возвращало False, а сравнение id() тех же инстансов возвращало True

#KXXPWK/YLX / @anonymous --> #KXXPWK/R5N / 1358 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.