<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial,helvetica,sans-serif;font-size:10pt">The OOP topic in my tutor has a section on persisting objects <br>by writing them to a text file. The basic principle being that <br>each subclass only persists the attributes that it adds and <br>relies on the superclass to persist itself.<br><br>In this case you would have to do someting like get the save() <br>method to return the list of attributes persisted. Then the bottom <br>subclass could see what all the superclasses had saved and <br>only save any new attributes not in that list. <br><br>The trick is unwinding that when you come to restore your <br>objects. You will need to store the data as name/value pairs so <br>that you can read the dynamic attributes, then use setattr() <br>or similar to create them dynamically again. The problem is <br>
how do you know that nobody has created a subclass below <br>
the bottom level?!" So that leaves you trying to read the entire <br>
list of attributes in at once at the top level and restore them<br>
which breaks the concept of objects only knowing about their <br>
own data...<br><br>Its all a bit messy, it is so much easier if you don't use <br>dynamic attributes.<br><br>&nbsp;Alan Gauld<br>Author of the Learn To Program website<br><a rel="nofollow" target="_blank" href="http://www.alan-g.me.uk">http://www.alan-g.me.uk/<br></a><div><br></div><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><div style="font-family: arial,helvetica,sans-serif; font-size: 10pt;"><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;"><font size="2" face="Tahoma"><b><span style="font-weight: bold;">From:</span></b> Jojo Mwebaze &lt;jojo.mwebaze@gmail.com&gt;<br><b><span style="font-weight: bold;">To:</span></b> Alan Gauld &lt;alan.gauld@btinternet.com&gt;<br><b><span style="font-weight: bold;">Cc:</span></b> tutor@python.org<br><b><span style="font-weight: bold;">Sent:</span></b> Monday, 13 December, 2010 22:50:49<br><b><span style="font-weight:
 bold;">Subject:</span></b> Re: [Tutor] making onthefly attributes persistent<br></font><br><br><br><div class="gmail_quote">On Mon, Dec 13, 2010 at 8:44 PM, Alan Gauld <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:alan.gauld@btinternet.com" target="_blank" href="mailto:alan.gauld@btinternet.com">alan.gauld@btinternet.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
"Jojo Mwebaze" &lt;<a rel="nofollow" ymailto="mailto:jojo.mwebaze@gmail.com" target="_blank" href="mailto:jojo.mwebaze@gmail.com">jojo.mwebaze@gmail.com</a>&gt; wrote<br>
<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
Assuming i have a class bank as below .<br>
<br>
class bank(object):<br>
 &nbsp;def __init__(self, bal=0):<br>
 &nbsp; &nbsp; &nbsp;self.bal = bal<br>
 &nbsp;def deposit(self, amount):<br>
 &nbsp; &nbsp; &nbsp;self.bal+=amount<br>
 &nbsp; &nbsp; &nbsp;print self.bal<br>
<br>
I define a method debit - which i add to the class onthefly<br>
<br></div>
bank.debit = debit<div class="im"><br>
<br>
#I can also add an attribute owner<br>
<br>
myaccount.owner = 'jojo'<br>
</div></blockquote>
<br><div class="im">
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
My problem is how to make the added attributes, 'owner' and 'debit'<br>
persistent automatically<br>
</blockquote>
<br></div>
If that's your only problem with this approach congratulations!<br>
How does your orther code know when/if these dynamic<br>
operations/data exist so as to use them? If they just assume<br>
they exist then why not just add them in the definition. Even as nulls?<br>
<br>
While Python allows you to dynamically add features to classes/objects<br>
its not something I would recommend unless you have a really good<br>
reason - not least because you bring upon yourself all sorts of problems!<br>
<br>
If you are determined to do so you can make the objects persistent<br>
using the approach I outline on my tutorial but adding a loop to cycle<br>
over the contents of dir(). But you may find that recovering the<br>
objects - especially if they have a mixed set of attribnutes - presents<br>
even more problems...<br>
<br>
IMHO This is a feature of python that should be considered unorthodox<br>
and only to be used when no other approach will work!<br>
<br>
HTH,<br>
<br>
<br></blockquote><div><br><br>Thanks Allan for the feedback, the idea is to write a method like store() on the object, that probably 
looks up all these changes and commits them into the database.<br><br>Please let me know where to find approach you propose in your tutorial. I read your tutorial when i was just initiated to python, a reference would be helpful to help me find the soln without hustle.<br>
<br>Cheers<br><br><br><br>&nbsp;</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
-- <br>
Alan Gauld<br>
Author of the Learn to Program web site<br>
<a rel="nofollow" target="_blank" href="http://www.alan-g.me.uk/">http://www.alan-g.me.uk/</a><br>
<br>
<br>
_______________________________________________<br>
Tutor maillist &nbsp;- &nbsp;<a rel="nofollow" ymailto="mailto:Tutor@python.org" target="_blank" href="mailto:Tutor@python.org">Tutor@python.org</a><br>
To unsubscribe or change subscription options:<br>
<a rel="nofollow" target="_blank" href="http://mail.python.org/mailman/listinfo/tutor">http://mail.python.org/mailman/listinfo/tutor</a><br>
</blockquote></div><br>
</div></div></blockquote>
</div></body></html>