Честно говоря, я не уверен, что полностью понял ваш вопрос, так что извините, если мой ответ не тот, который вы ищете ... все же, вместо применения фильтра на входе каждого обработчика, я бы добавил свойство к объект Unicode (или строка), который вы передаете. Что-то вроде:
>>> class LogMsg(unicode):
... def __new__(cls, string_):
... if string_[:7] == '!Silent':
... cls.nolog = True
... return super(LogMsg, cls).__new__(cls, string_[7:])
... else:
... cls.nolog = False
... return super(LogMsg, cls).__new__(cls, string_)
...
>>> a = LogMsg('The hard drive is on fire!')
>>> a
u'The hard drive is on fire!'
>>> a.nolog
False
>>> b = LogMsg('!SilentMy feet stink! :(')
>>> b
u'My feet stink! :('
>>> b.nolog
True
Таким образом, вы можете просто обойти 'строку', которая никогда не отображает !Silent
, но имеет скрытый флаг (nolog
), который вы можете проверить только в случае необходимости.
НТН,
/ Макинтош