ShuraBB 1,151 Posted May 28, 2016 (edited) Пытаюсь в scripts/client/gui/battle_control/arena_info/__init__.py поставить хук на функцию battleEndWarningEnabled Пробовал и стандартно from gui.battle_control import arena_info и import gui.battle_control.arena_info as arena_info - не ставится. import gui.battle_control.arena_info as arena_info #from gui.battle_control import arena_info def EndWarning(): print 'Хук поставили' return False arena_info.battleEndWarningEnabled = EndWarning #arena_info.battleEndWarningEnabled = EndWarning Edited May 29, 2016 by ShuraBB Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #329688 Posted May 28, 2016 @ShuraBB, у меня всё работает) Quote Share this post Link to post Short link Share on other sites
ShuraBB 1,151 #329832 Posted May 29, 2016 Оно работает, почти... Функция вызывается из gui/Scaleform/daapi/view/battle/TimersBar и gui/Scaleform/Battle В TimersBar импорт делается from gui.battle_control import arena_info и тут как раз хук и работает а вот в Battle, через from gui.battle_control.arena_info import battleEndWarningEnabled и тут он не срабатывает Quote Share this post Link to post Short link Share on other sites
GPCracker 2,088 #330219 Posted May 30, 2016 (edited) и тут он не срабатываетПотому что кому-то стоит перечитать доки на питон. Ибо то, что происходит вполне логично.Значение любой переменной в питоне есть ссылка на объект. Не сам объект, а именно ссылка на него. Поэтому меняя значение переменной, ты меняешь не объект, а ссылку. Копируя значение, ты копируешь ссылку, сам объект не копируется. Это объясняет два явления: 1. Импорт функции, который произошел до установки хука, скопировал ссылку на старый объект. Поэтому и не работает. 2. Изменение атрибутов класса затрагивает все объекты этого класса, ибо объект подтягивает методы из класса. Упрощенный пример, в комментах аналогия >>>a = 5 # function def >>>b = a # function import >>>a = 6 # hook install >>>print b # imported function call 5Бесплатный совет: не ставь хуки на независимые функции (функции модуля). Edited May 30, 2016 by GPCracker Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #330333 Posted May 31, 2016 а что сразу тут не? from gui.Scaleform.daapi.view.battle.battle_end_warning_panel import BattleEndWarningPanel Quote Share this post Link to post Short link Share on other sites
ShuraBB 1,151 #330388 Posted May 31, 2016 >а что сразу тут не?Предлагаешь вообще панель не выводить? Боюсь косяки будут. Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #330399 Posted May 31, 2016 >а что сразу тут не? Предлагаешь вообще панель не выводить? Боюсь косяки будут. ну я там хукаю, косяков никаких нет Quote Share this post Link to post Short link Share on other sites
ShuraBB 1,151 #330451 Posted May 31, 2016 >ну я там хукаю, косяков никаких нетБыла мысль красиво сделать - False и все, но видно не судьба :-))) Quote Share this post Link to post Short link Share on other sites