On Mar 28, 2008, at 12:55 AM, Phillip J. Eby wrote:

>
> 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?  What are the
> bits you don't want run, anyway?  That is, what specifically mustn't  
> happen?

an end-user's __init__ method is not run when the object is loaded  
from the DB since the ORM is going to populate its state explicitly.    
its for similar reasons that pickle.loads() doesn't call __init__.     
Its a common use case that someone's class needs to be constructed  
differently when it is newly created vs. when it is re-populated from  
the DB.

The usual method we have of modifying this behavior is to use a  
MapperExtension where you implement create_instance().  Then you can  
build the object any way you want, using __init__, whatever.   Why is  
that not an option here ?  ( or has it just not been mentioned ?)

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