Python: Family-class -
i'm implementing "person"-class arguments name, title, , children. function "desc" should homecoming list of persons below family tree.
so far, i've done this:
class person(): def __init__(self, name, title, children=none): self.name = name self.title = title if children none: self.children = [] else: self.children = children def desc(self): self.out = [] if self.children: kid in self.children: self.out.append(kid) homecoming self.out p1 = person("p1", "test") p2 = person("p2", "test", children = [p1]) p3 = person("p3", "test") p4 = person("p4", "test", children = [p2, p3]) p5 = person("p5", "boss", children = [p4]) print [person.title person in p5.desc()] # desired output: # ['test', 'test', 'test','test'] print [person.name person in p5.desc()] # desired output: # ['p4', 'p2', 'p1', 'p3'] but actual output not desired one. so, question is: how save children? in simple list? problem in def desc(). help!
you'll have recurse on children lists:
def desc(self): out = [] kid in self.children: out.append(kid) out.extend(kid.desc()) homecoming out this uses desc() method on current object, calls same method on each listed kid extend current result list. continues on until objects no children encountered.
note out doesn't need attribute on instance; i've kept local variable instead.
this produces expected output:
>>> class person(): ... def __init__(self, name, title, children=none): ... self.name = name ... self.title = title ... if children none: ... self.children = [] ... else: ... self.children = children ... def desc(self): ... out = [] ... kid in self.children: ... out.append(kid) ... out.extend(kid.desc()) ... homecoming out ... >>> p1 = person("p1", "test") >>> p2 = person("p2", "test", children = [p1]) >>> p3 = person("p3", "test") >>> p4 = person("p4", "test", children = [p2, p3]) >>> p5 = person("p5", "boss", children = [p4]) >>> print [person.title person in p5.desc()] ['test', 'test', 'test', 'test'] >>> print [person.name person in p5.desc()] ['p4', 'p2', 'p1', 'p3'] so p5.desc() adds p4 out list, extends list result of p4.desc(). p4.desc() adds p2 it's local out list, extends result of p2.desc(), adds p3 out , extends p3.desc(), etc.
python
No comments:
Post a Comment