ShuraBB Posted May 28, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted May 28, 2016 Share Posted May 28, 2016 @ShuraBB, у меня всё работает) @ Quote Link to comment Short link Share on other sites More sharing options...
ShuraBB Posted May 29, 2016 Author Share 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 Link to comment Short link Share on other sites More sharing options...
GPCracker Posted May 30, 2016 Share 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 Link to comment Short link Share on other sites More sharing options...
Ekspoint Posted May 31, 2016 Share Posted May 31, 2016 а что сразу тут не? from gui.Scaleform.daapi.view.battle.battle_end_warning_panel import BattleEndWarningPanel @ Quote Link to comment Short link Share on other sites More sharing options...
ShuraBB Posted May 31, 2016 Author Share Posted May 31, 2016 >а что сразу тут не?Предлагаешь вообще панель не выводить? Боюсь косяки будут. @ Quote Link to comment Short link Share on other sites More sharing options...
Ekspoint Posted May 31, 2016 Share Posted May 31, 2016 >а что сразу тут не? Предлагаешь вообще панель не выводить? Боюсь косяки будут. ну я там хукаю, косяков никаких нет @ Quote Link to comment Short link Share on other sites More sharing options...
ShuraBB Posted May 31, 2016 Author Share Posted May 31, 2016 >ну я там хукаю, косяков никаких нетБыла мысль красиво сделать - False и все, но видно не судьба :-))) @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.