On Fri, Aug 4, 2017 at 6:07 PM, Shane Carey <shanecare...@gmail.com> wrote: > I am trying to remove duplicate code in this scenario described here > > http://docs.sqlalchemy.org/en/latest/orm/constructors.html > > class Obj(Base): > def __init__(self, **kwargs): > super().__init__(**kwargs) > self.extra = # ... some complicated construction based off of a > kwarg > > @orm.reconstructor > def init_on_load(self): > self.extra = # ... same complicated construction based off of self > attribute
normally you'd factor the complexity into a new method and have __init__ and init_on_load call that: class Obj(Base): def __init__(self, **kw): self._do_complex_init(kw['foo'], kw['bar']) @orm.reconstructor def init_on_load(Self): self._do_complex_init(self.foo, self.bar) > Is it possible to intercept the setting of the attribute self.extra depends > on What kind of attribute (ORM mapped column? plain attribute not linked to a SQL expression?) and then when you say "setting" do you mean userland setting (like you said myobj.the_attribute = 5) or you mean when it is loaded by the ORM? Overall I think you might be interested in these events: init - http://docs.sqlalchemy.org/en/latest/orm/events.html?highlight=mapperevents#sqlalchemy.orm.events.InstanceEvents.init load - http://docs.sqlalchemy.org/en/latest/orm/events.html?highlight=mapperevents#sqlalchemy.orm.events.InstanceEvents.load Above, the "load" event is what is used to implement @orm.reconstructor which is from before we had a fully consistent event system. I'm pushing out a change in the documentation that correctly links @orm.reconstructor to the InstanceEvents.load event. -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to email@example.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.