Phillip J. Eby wrote: > At 06:08 PM 3/27/2008 -0700, jason kirtland wrote: > >> Phillip J. Eby wrote: >>> At 02:26 PM 3/27/2008 -0700, jason kirtland wrote: >>>>>> new_instance creates an instance without invoking __init__. The ORM >>>>>> uses it to recreate instances when loading from the database. >>>>>> new_instance can be added to InstrumentationManager as an extension >>>>>> method... The ORM doesn't care how empty instances are manufactured so >>>>>> long as they can be created without initialization arguments, e.g. a >>>>>> no-arg constructor. >>>>> Does that mean that no attributes must be set from >> new_instance(), either? >>>> You should be able to set whatever you like there. >>> So... new_instance() could literally just be a call to >>> 'self.class_()', with no other behavior, as long as the constructor >>> requires no arguments? The modified __init__ that SA inserts won't >>> be a problem there? >> Sorry, I should have included more detail. You don't want to trigger >> the logic in SA's __init__ decorator or call the user's __init__. The >> ORM policy is not to __init__ on load, and will soon support a symmetric >> "__on_load__" type of hook that the ORM can call post-__new__ when >> reconstituting instances. >> >> The docstring from attributes.new_instance hasn't yet been copied to the >> new ClassManager method it now delegates to, but the existing contract >> is still the guide here: >> >> def new_instance(class_, state=None): >> """Create a new instance of class_ without calling __init__().""" > > Sadly, about the only way for me to implement that without code > duplication will be to temporarily change the item's __class__ to a > subclass with an empty __init__ method. Unless there's a way to > change the generated __init__ method to take an extra flag or check a > per-thread variable to skip the bits you don't want?
Perhaps you can pass a flag to your __call__ from new_instance and skip running __init__ if present. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---