Форум сайта python.su
Помогите, пожалуйста.
Я переопределил метод __setattr__ для класса следующим образом:
class SomeClass(SomeMetaClass):
def _setattr(cls,name,val):
try:
cls.__getattribute__(name)
except:
cls.__dict__[name]=val
SomeMetaClass.__setattr__=_setattr
Офлайн
нужен полный пример. Что за SomeMetaClass?
Офлайн
Да без разницы, пусть будет:
class SomeMetaClass(object):
pass
from elixir import *
class BigClass(Entity):
def _setattr(cls,name,val):
if not cls.__dict__.has_key(name):
cls.__dict__[name]=val
EntityMeta.__setattr__=_setattr
@classmethod
def select_by(*args,**kwargs):
cls=args[0]
kwargs[type]=cls.type
return cls[0].__class__.select_by(**kwargs)
class SomeClass(BigClass):
type=1
#EntityMeta и Entity для данной задачи можно считать одним и тем же классом
Отредактировано (Июнь 26, 2007 15:48:36)
Офлайн
Скажу сразу: с Эликсиром не работал. В отличие от алхимии.
Но, как я вижу из его сорцов, select_by он сам не навешивает.
И уж тем более не совсем через setattr.
elixir/entity.py: 167 - прикладывается assign_mapper к entity, который, используя assignmapper extension инструментирует entity.
Посмотри на sqlalchemy/ext/assign_mapper.py: 4 monkeypatch_query_method. Им же и твою реализацию прикрутить можно.
Если, конечно, я правильно понял цель - в select_by один из критериев выборки жестко зашивать в самом entity
Алхимия 0.3.9, Эликсир 0.3.0
Если я совсем тебя не понял - попытайся по другому сформировать вопрос.
Кстати, assingmapper - кривоватая штука, рудимент от первой бородатой версии
Отредактировано (Июнь 26, 2007 19:12:26)
Офлайн
Спасибо. Про monkeypatch_query_method то я знаю, именно из него вызывается setattr, но насколько я понял метод select_by он вытаскивает прямо из Query. А как бы его заставить цеплять свой select_by? Все-таки сырцы sqlalchemy менять как-то не хочется.
Офлайн
Нави ГаторЭто то, что ты хотел?
Спасибо. Про monkeypatch_query_method то я знаю, именно из него вызывается setattr, но насколько я понял метод select_by он вытаскивает прямо из Query. А как бы его заставить цеплять свой select_by? Все-таки сырцы sqlalchemy менять как-то не хочется.
Офлайн
Пасиибаа!
Как раз то, что надо
Офлайн