si*****@lkb.ens.fr wrote:
Hello there,
i am pretty new to object-oriented programming and i have a question:
let's say i have a simple class such as:
class father:
age=...
name=....
def abcd.....
class son(father):
age=....
name=....
def efgh:
or any other heirarchic structure of class and subclasses.
i would like to list or print the data content of a given instance of the
subclass, all the way up (e.g. if sam is jack's son, so i would like to
get their names and ages and use the class as a data structure for that
matter).
You misunderstand Python's classes. There is little, if any advantage
to defining a class inside another class.
How about
:
import weakref # to keep everyone from being immortal.
class Person(object):
def __init__(self, age, name, dad=None, mom=None):
self.name = name
self.age = age
self.dad = dad
self.mom = mom
self._kids = weakref.WeakValueDictionary()
if dad is not None:
dad.add_kid(self)
if mom is not None:
mom.add_kid(self)
def children(self):
return self._kids.values()
def add_kid(self, child):
assert self.age child.age
self._kids[id(child)] = child
def __repr__(self):
return '%s(%s)' % (self.name, self.age)
guy = Person(age=28, name='George')
gal = Person(age=31, name='Martha')
kid = Person(age=1, name='Ellen', dad=guy, mom=gal)
print '%s of %s and %s.' % (kid, kid.dad, kid.mom)
print "%s's kids: %s." % (guy, guy.children())
print "%s's kids: %s." % (gal, gal.children())
--Scott David Daniels
sc***********@acm.org