Форум сайта python.su
__get__ и __set__ для classname.attr синтаксиса.
А как юзать classname синтаксис? Такой надо бы сделать (
class Registry(object):
data = {}
@staticmethod
def __set__(variable, value):
Registry.data[variable] = value
@staticmethod
def __setitem__(variable, value):
Registry.data[variable] = value
@staticmethod
def __get__(variable):
return Registry.data[variable]
@staticmethod
def __getitem__(variable):
return Registry.data[variable]
@staticmethod
def __delete__(variavle):
del(Registry.data[variable])
Registry.e = 12
print Registry.e
Registry['e'] = 34
print Registry['e']
Отредактировано (Авг. 24, 2009 22:57:50)
Офлайн
classname - смахивает на ересь какую-то:) Обязательно делать Registry классом? Может сделать Registry инстансом класса и там всё необходимое реализовать как это и принято делать?
Офлайн
Просто хочется, чтобы и такой синтаксис поддерживало.
> инстансом класса
А как он будет виден из модулей тогда в их глобальной области?)
В этом и прикол сабжа, что это хранилище, везде доступное.
http://framework.zend.com/manual/en/zend.registry.html
Офлайн
class _Registry(object):
...
Registry = _Registry()
Офлайн
Registry = _Registry()
Допустим я в другом файле его подключаю и делаю так же(пока опустим, что это лишняя строка).
Так и объект же другой будет, а надо тот же. Уж не синглетоном его же делать
P.S. Пройдите по ссылке выше, там про Zend_Registry написано
Офлайн
А проверку может можно сделать если объект есть то не создавать?
if not Registry:
Registry = _Registry()
Офлайн
Его НЕЛЬЗЯ создавать повторно )
Можно обойти через синглтон, но некрасиво.
Ну код рабочий есть для Registry.attr. Просто хочется через синтаксис юзать.
Офлайн
Так не создавайте его повторно, он будет создан в единственном экземпляре в том же модуле, где и _Registry находится, а импортировать вы будете не класс (_Registry), а его инстанс (Registry), вот и вся разница.
nerezus У вас там многопоточное приложение или нет?
Отредактировано (Авг. 25, 2009 08:14:47)
Офлайн
> nerezus У вас там многопоточное приложение или нет?
Естественно.
Но я блокирую вне него, т.к. внутри непотокобезопасно.
А про экземпляр… прикольно )
Офлайн
nerezusтак это один из способов создания синглтона в питоне, который вам почему-то `некрасиво` =)
А про экземпляр… прикольно )
class _Registry(dict):
...
Отредактировано (Окт. 29, 2009 20:33:30)
Офлайн