Python:家庭级

标签 python

我正在实现一个带有参数名称、标题和子项的“person”类。 函数“desc”应该返回家谱下面的人员列表。

到目前为止,我已经这样做了:

class Person():
    def __init__(self, name, title, children=None):
        self.name = name
        self.title = title
        if children is None:
            self.children = []
        else:
            self.children = children


    def desc(self):
        self.out = []
        if self.children:
            for kid in self.children:
                self.out.append(kid)
            return 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 for person in p5.desc()]
# desired output:
# ['test', 'test', 'test','test']
print [person.name for person in p5.desc()]
# desired output:
# ['p4', 'p2', 'p1', 'p3']

但是我的实际输出看起来并不像预期的那样。 那么,我的问题是:你将如何拯救 children ?在一个简单的列表中?问题显然出在 def desc() 中。 感谢您的帮助!

最佳答案

您必须递归 children列表:

def desc(self):
    out = []
    for kid in self.children:
        out.append(kid)
        out.extend(kid.desc())
    return out

这使用 desc()方法,然后对每个列出的子对象调用相同的方法以扩展当前结果列表。这一直持续到遇到没有子对象的对象为止。

请注意out不需要是实例的属性;我保留了一个局部变量。

这会产生您预期的输出:

>>> class Person():
...     def __init__(self, name, title, children=None):
...         self.name = name
...         self.title = title
...         if children is None:
...             self.children = []
...         else:
...             self.children = children
...     def desc(self):
...         out = []
...         for kid in self.children:
...             out.append(kid)
...             out.extend(kid.desc())
...         return 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 for person in p5.desc()]
['test', 'test', 'test', 'test']
>>> print [person.name for person in p5.desc()]
['p4', 'p2', 'p1', 'p3']

所以p5.desc()添加p4out列表,然后使用 p4.desc() 的结果扩展列表。 p4.desc()添加p2到它的本地out列表,用 p2.desc() 的结果扩展它,然后添加 p3out并用 p3.desc() 扩展它等

关于Python:家庭级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26869467/

相关文章:

python - 以python中的for循环结束

python - Pandas to_datetime 意外更改年份

python - 如何从 csv 中删除一列?

python - 如何将数据从 MetaTrader 4/5 终端发送到外部服务器?

python - 在 Pandas 数据框中成对计数

python - 设置x轴和y轴的值

python - 在 jupyter 中禁止显示 matplotlib 动画中的最后一帧

python - 如何使用字典中的json模块将字符串数据转换为整数?

python - 如何从 3D numpy meshgrid 中提取 2D 平面

python - 来自 NLTK、Gensim、Scikit Learn 的 API 调用