Форум сайта python.su
0
>>> SETTINGS_STATE = method_updater()
>>> SETTINGS_STATE
False
>>> smth.set(True)
>>> SETTINGS_STATE
False
>>> method_updater()
True
Хочу чтобы переменная конфига сама за собой следила,
но пока не придумал, как.. м.б. это в принципе невозможно, в данном ключе сделать?
Офлайн
173
Если бы SETTING_STATE был в объекте, было бы проще.
config.SETTING_STATE
Офлайн
0
method_updater() - это часть реализации паттерна “наблюдатель” - он возвращает текущее значение какого-то аттрибута класса.
Требуется придумать реализацию такой ссылки SETTINGS_STATE = method_updater(), которая бы вызывала сам метод, а не ссылалась на объект, им порождаемый.
Нужен сферический пример в вакууме, либо сказать, что это не возможно + пруфлинк. :)
Отредактировано ks (Окт. 24, 2012 20:21:27)
Офлайн
173
ksневозможно
либо сказать, что это не возможно + пруфлинк.
config.SETTING_STATE = something
Офлайн
16
Может я чего не понимаю, но что мешает делать:
SETTINGS_STATE = method_updater # и потом: SETTING_STATE()
Офлайн
0
2GaiveR
Может я чего не понимаю, но что мешает делать:Лишняя скобочка. Я получаю моральные страдания, используя её в такого типа значениях :D
SETTINGS_STATE = method_updater
# и потом:
SETTING_STATE()
?
Но опять же, если допустима записьМожно пример творения “много чего …, хоть с property или дескрипторами, хоть с __setattr__/__getattr__” ?
config.SETTING_STATE = something
, тогда можно много чего натворить, хоть с property или дескрипторами, хоть с __setattr__/__getattr__.
Отредактировано ks (Окт. 25, 2012 16:54:11)
Офлайн
173
ksЕще раз прочитал сообщения и окончательно запутался. Совсем не понимаю чего вы хотите.
Можно пример творения “много чего …, хоть с property или дескрипторами, хоть с __setattr__/__getattr__”
ksИли нужно как раз это, только без “скобочек”?
2GaiveR
Может я чего не понимаю, но что мешает делать:
SETTINGS_STATE = method_updater
# и потом:
SETTING_STATE()
?
Лишняя скобочка. Я получаю моральные страдания, используя её в такого типа значениях
reclosedev
Покажите лучше запускаемый пример и желаемый результат.
Офлайн
0
reclosedevТочно. Как раз это. Т.е. метод который постоянно возвращает необходимое значение у меня уже есть.
Или нужно как раз это, только без “скобочек”?
Офлайн
173
ksЯ и теперь не понял
Наверное я изначально неправильно сформулировал.

class Config(object): def __init__(self, method): self._method = method @property def SETTING_STATE(self): return self._method() class Foo(object): def __init__(self): self.bar = 1 def method_updater(self): return self.bar foo = Foo() cfg = Config(foo.method_updater) print cfg.SETTING_STATE # 1 foo.bar += 1 print cfg.SETTING_STATE # 2
Офлайн
0
reclosedevБинго! Спасибо - это как раз то, что нужно.
одна догадка
Офлайн