[General lang] how to call a parent
Jeff Epler
jepler at unpythonic.net
Sun Jun 15 18:53:12 CEST 2003
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