我是这里的新手,而python很新!

我们完成了一项作业,而我已经能够完成其余的工作,但是仍然存在一个问题:
如果我有这样的树层次结构:

root = [
    parent1 = [
        child1,
        child2 = [
            sub_child
        ]
        child3
    ],
    parent2 = [
        child1,
        child2
    ]
]


它们都是一个名为TreeHierarchyClass的类的实例,并且都具有name属性,如何找到输入名称的那个?

我尝试使用for循环,但是无法知道我需要多少个循环?获得名称很容易:

name = input("Enter name: ")
if name == TreeHierarchyObject.name:
    print("Found it!")


但是如何遍历对象呢?

最佳答案

您应该在这里使用简单的递归。
该方法在某种程度上取决于您的子对象如何附加到父对象。

如果他们在列表self.children中,则此方法有效,我建议这样做。
只需在您的类中定义以下方法:

def findObjectByName(self, name):
    if self.name == name:
        return self
    else:
        for child in self.children:
            match = child.findObjectByName(name)
            if match:
                return match


编辑:
要使此属性适用于任何属性,而不仅仅是名称,请使用getattr()

def findObject(self, attr, value):
    if getattr(self, attr) == value:
        return self
    else:
        for child in self.children:
            match = child.findObject(attr, value)
            if match:
                return match


只需调用root.findObjectByName("Sub Child!")或使用第二种方法:root.findObject("name", "Sub Child!")

10-08 09:23
查看更多