[General lang] how to call a parent

JOHN FABIANI johnf at jfcomputer.com
Sun Jun 15 18:48:36 EDT 2003


I never thought of keeping a linked list of the parents of an object but
that will work.  Thanks to all for the info.  I'm also checking on the
reserved work 'super'.  I'm reading an older book.

John

On Sun, 2003-06-15 at 09:53, Jeff Epler wrote:
> What is the "parent" of an object?  For instance given
> 
> class Z: pass
> 
> a = Z()
> b = Z()
> c = Z()
> 
> a.kids = [c]
> b.kids = [c]
> 
> it's clear that c is-a kid of a, and c is-a kid of b, so what is c's
> parent?  Python can have any sort of directed graph for objects, not just a
> tree, so the language doesn't define the parent of an object.
> 
> However, if you work only with objects of your own devising, you can keep
> track of the parent/child relationship:
> 	class FamilyTree:
> 		def __init__(self, name, parent=None):
> 			self.name = name
> 			self.kids = []
> 			self.parent = None
> 			if parent is not None: parent.add(self)
> 
> 		def add(self, kid):
> 			if kid.parent:
> 				kid.parent.kids.remove(kid)
> 			kid.parent = self
> 			self.kids.append(kid)
> 
> 		def newkid(self, name):
> 			return FamilyTree(name, self)
> 
> 		def __repr__(self):
> 			return ("<%s with %d kids>"
> 				% (self.name, len(self.kids)))
> >>> from ft import FamilyTree
> >>> a = FamilyTree("a")
> >>> b = FamilyTree("b", a) # or b = a.newkid("b")
> >>> c = FamilyTree("c", b)
> 
> >>> print b, b.parent      # B has a kid, and the right parent
> <b with 1 kids> <a with 1 kids>
> >>> print c, c.parent      # C has no kids and the right parent
> <c with 0 kids> <b with 1 kids>
> >>> a.add(c)               # A adopts C (B was bad parent?)
> >>> print b, b.parent      # B now has 1 kid, A now has 2
> <b with 0 kids> <a with 2 kids>
> >>> print c.parent         # sure enough, C's parent is A
> <a with 2 kids>
> 
> a = FamilyTree("a")
> b = FamilyTree("b", a)
> c = FamilyTree("c", b)
> 
> Jeff
> 





More information about the Python-list mailing list