Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 24, 2012 10:22:35

ks
От:
Зарегистрирован: 2009-05-20
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

>>> SETTINGS_STATE = method_updater()
>>> SETTINGS_STATE
False
>>> smth.set(True)
>>> SETTINGS_STATE
False
>>> method_updater()
True

Хочу чтобы переменная конфига сама за собой следила,
но пока не придумал, как.. м.б. это в принципе невозможно, в данном ключе сделать?



Офлайн

#2 Окт. 24, 2012 17:20:28

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

Если бы SETTING_STATE был в объекте, было бы проще.

config.SETTING_STATE
Но не до конца понятно, что хотите сделать. Что такое method_updater(), smth.set(True)?
Покажите лучше запускаемый пример и желаемый результат.

Офлайн

#3 Окт. 24, 2012 20:20:57

ks
От:
Зарегистрирован: 2009-05-20
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

method_updater() - это часть реализации паттерна “наблюдатель” - он возвращает текущее значение какого-то аттрибута класса.
Требуется придумать реализацию такой ссылки SETTINGS_STATE = method_updater(), которая бы вызывала сам метод, а не ссылалась на объект, им порождаемый.
Нужен сферический пример в вакууме, либо сказать, что это не возможно + пруфлинк. :)



Отредактировано ks (Окт. 24, 2012 20:21:27)

Офлайн

#4 Окт. 24, 2012 20:55:46

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

ks
либо сказать, что это не возможно + пруфлинк.
невозможно
https://www.google.ru/search?&q=python+override+assignment
http://mail.python.org/pipermail/tutor/2006-September/049437.html

Но опять же, если допустима запись
config.SETTING_STATE = something
, тогда можно много чего натворить, хоть с property или дескрипторами, хоть с __setattr__/__getattr__.

Офлайн

#5 Окт. 24, 2012 21:32:35

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

Может я чего не понимаю, но что мешает делать:

SETTINGS_STATE = method_updater
# и потом:
SETTING_STATE()

?



Офлайн

#6 Окт. 25, 2012 16:52:34

ks
От:
Зарегистрирован: 2009-05-20
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

2GaiveR

Может я чего не понимаю, но что мешает делать:
SETTINGS_STATE = method_updater
# и потом:
SETTING_STATE()

?
Лишняя скобочка. Я получаю моральные страдания, используя её в такого типа значениях :D

2reclosedev
Но опять же, если допустима запись
config.SETTING_STATE = something
, тогда можно много чего натворить, хоть с property или дескрипторами, хоть с __setattr__/__getattr__.
Можно пример творения “много чего …, хоть с property или дескрипторами, хоть с __setattr__/__getattr__” ?
Или в худшем случае - где почитать.. слабенько получается вникнуть в эту концепцию, пока-что.
Мне про направление в сторону __getattr__ говорили, но идею не понял и по доке неосилил.



Отредактировано ks (Окт. 25, 2012 16:54:11)

Офлайн

#7 Окт. 25, 2012 18:14:02

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

ks
Можно пример творения “много чего …, хоть с property или дескрипторами, хоть с __setattr__/__getattr__”
Еще раз прочитал сообщения и окончательно запутался. Совсем не понимаю чего вы хотите.
Что за “часть реализации паттерна “наблюдатель””, причем тут атрибуты класса (может объекта?). Что значит “следила за собой”.

ks
2GaiveR
Может я чего не понимаю, но что мешает делать:
SETTINGS_STATE = method_updater
# и потом:
SETTING_STATE()

?
Лишняя скобочка. Я получаю моральные страдания, используя её в такого типа значениях
Или нужно как раз это, только без “скобочек”?

Повторяю
reclosedev
Покажите лучше запускаемый пример и желаемый результат.

Единственная догадка - что нужен объект, на изменения атрибутов которого можно подписаться.
Готовая, мощная библиотека - http://code.enthought.com/projects/traits/examples.php

Офлайн

#8 Окт. 25, 2012 21:26:10

ks
От:
Зарегистрирован: 2009-05-20
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

reclosedev
Или нужно как раз это, только без “скобочек”?
Точно. Как раз это. Т.е. метод который постоянно возвращает необходимое значение у меня уже есть.
Но я хочу обращаться к нему, будто обращаюсь к RANDOM_CFG_VALUE
Наверное я изначально неправильно сформулировал.



Офлайн

#9 Окт. 25, 2012 22:20:33

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

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

Офлайн

#10 Окт. 26, 2012 12:31:44

ks
От:
Зарегистрирован: 2009-05-20
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

возможно ли реализовать паттерн наблюдатель на низком уровне?

reclosedev
одна догадка
Бинго! Спасибо - это как раз то, что нужно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version