Python遍历具有对象列表的对象

2024-10-01 15:40:14 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以遍历包含对象列表的对象。在

例如,我有下面的课

Class Page(object)

    def __init__(self, name):

        self.name = name
        self.pages = []

然后,我创建一个新的页面对象并向其添加其他页面对象。在

^{pr2}$

我想做的是

for thispage in page:
    print thispage.name

得到以下输出

FirstPage
FirstChild
SecondChild
FirstChildChild
SecondChildChild

所以我得到所有的第一级,然后第二级,然后第三级

但是,也可以找到以下输出

FirstPage
FirstChild
FirstChildChild
SecondChildChild
SecondChild

Tags: 对象nameself列表objectdefpage页面
3条回答

递归执行:

class Page(object):
    def __init__(self, name):
        self.name = name
        self.pages = []

    def __iter__(self):
        for p in self.get_children_pages(self):
            yield p

    def get_children_pages(self, start_page):
        result = [start_page.name]
        for this_page in start_page.pages:
            result.extend(self.get_children_pages(this_page))
        return result


>>>>for p in page:
....    print p

FirstPage
FirstChild
FirstChildChild
SecondChildChild
SecondChild

递归地做

def print_all_pages(page):
    print page.name
    if len(page.pages) == 0 then:
        return
    else:
        for child_page in page.pages:
            print_all_pages(child_page)

def print_pages(pages_collection):
    for page in pages_collection:
        print_all_pages(page)

您可以定义__str__

from itertools import chain

class Page(object):
    def __init__(self, name):
        self.name = name
        self.pages = []
    def __str__(self):
        return "\n".join(chain([self.name], map(str, self.pages)))

那么你就可以print page

或者,如果希望使用for循环,可以定义迭代器

^{pr2}$

相关问题 更多 >

    热门问题