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
-~----------~----~----~----~------~----~------~--~---

Reply via email to