[Tutor] Inheriting from parent object

Ed Singleton singletoned at gmail.com
Tue Nov 22 13:41:11 CET 2005


Thanks for this.  I hadn't really considered that I would have to
explicitly store parent/child relationships.

Having been browsing for something else, I came across this page about
Unifying types and classes:
http://www.python.org/2.2.3/descrintro.html

>From it, it looks like I could do something like:

class Page(object):

	def __init__(self, parent):
		self.__header = None
		self.parent = parent

	def getheader(self):
		if not self._header and self.parent:
			return self.parent.header
		else:
			return self.__header

	def setheader(self, header):
		self.__header = header

	header = property(getheader, setheader)

Which I think would end up doing exactly what I want.

I still don't think I'm clear on the use of self though.  Can I only
use it in class definitions?

I think it might be that

myPage = Page(parentPage)

is highly deceptive.  Shouldn't it really be:

new Page(myPage, parentPage)

or

myPage = new Page(myPage, parentPage)

or am I getting really, really confused?

Ed



On 15/11/05, alan.gauld at freenet.co.uk <alan.gauld at freenet.co.uk> wrote:
> >>Sorry, I didn't really explain myself clearly.
>
> Thats OK its easy to get buried in the depths and
> forget everyone else is coming at it cold. But
> the use of non standard terms confused things
> even more!
>
> >>I want to create a kind of website ...
> >>I want to have a root object, which
> >>has page objects.  The page objects
> > will have various properties
> >like header, footer, body and an order
>
> Sounds like a job for classes. Create a
> Page class with the various properties.
> Initialise objects with their parent
> (ie containing) object.
>
> >>to inherit the attribute from their parent page (ie if it is
> >>root.chapter3.page5 then chapter3 is the parent of page5).
>
> >>I guess the psuedo code would be:
> >>
> >>def inherit()
> >>    return this.parent.attribute
> >>
>
> Just put code like this in the init method:
>
> Class Page:
>    def __init__(self, parent = None):
>       self.parent = parent # and handle default too!
>    def getHeader(self):
>       return self.parent.header
>
> etc...
>
> Then create
>
> Chapter3 = Page()
> Chapter3.header = '''<h1>some long string here....'''
> Chapter3.getHeader()
> p2 = Page(Chapter3)
> p2.getHeader()  # returns Chapter3.header
>
> etc
>
> >>(I know Python doesn't really have a 'this'
>
> But it does have self.... and you can use
> this if you prefer!
>
>
> >>knowing who the function was called by).
>
> Thats not really needed if you use objects.
> Although self does point at the specific
> Page whose method is being invoked.
>
> HTH,
>
> Alan G
>
>


More information about the Tutor mailing list