首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GTD应用程序的复合模式

GTD应用程序的复合模式
EN

Stack Overflow用户
提问于 2009-07-25 01:10:47
回答 1查看 611关注 0票数 3

这是one of my previous questions的延续

这是我的课程。

代码语言:javascript
复制
#Project class     
class Project:
    def __init__(self, name, children=[]):
        self.name = name
        self.children = children
    #add object
    def add(self, object):
        self.children.append(object)
    #get list of all actions
    def actions(self):
        a = []
        for c in self.children:
            if isinstance(c, Action):
                a.append(c.name)
        return a
    #get specific action
    def action(self, name):
        for c in self.children:
            if isinstance(c, Action):
                if name == c.name:
                    return c
    #get list of all projects
    def projects(self):
        p = []
        for c in self.children:
            if isinstance(c, Project):
                p.append(c.name)
        return p
    #get specific project
    def project(self, name):
        for c in self.children:
            if isinstance(c, Project):
                if name == c.name:
                    return c

#Action class  
class Action:
    def __init__(self, name):
        self.name = name
        self.done = False

    def mark_done(self):
        self.done = True

这就是我遇到的麻烦。如果我构建一个包含几个小项目的大项目,我想要查看项目是什么或当前项目的操作,但是我将它们都放在树中。下面是我正在使用的测试代码(请注意,我特意选择了几种不同的方式来添加项目和动作以进行测试,以确保不同的方式工作)。

代码语言:javascript
复制
life = Project("life")

playguitar = Action("Play guitar")

life.add(Project("Get Married"))

wife = Project("Find wife")
wife.add(Action("Date"))
wife.add(Action("Propose"))
wife.add(Action("Plan wedding"))
life.project("Get Married").add(wife)

life.add(Project("Have kids"))
life.project("Have kids").add(Action("Bang wife"))
life.project("Have kids").add(Action("Get wife pregnant"))
life.project("Have kids").add(Project("Suffer through pregnancy"))
life.project("Have kids").project("Suffer through pregnancy").add(Action("Drink"))
life.project("Have kids").project("Suffer through pregnancy").add(playguitar)

life.add(Project("Retire"))
life.project("Retire").add(playguitar)

生活中应该有几个项目,其中有几个项目。这个结构就像这样(缩进是项目,-是动作)

代码语言:javascript
复制
Life
    Get Married
        Find wife
            - Date
            - Propose
            - Plan wedding
    Have kids
        - Bang wife
        - Get wife pregnant
        Suffer through pregnancy
            - Drink
            - Play guitar
    Retire
        - Play guitar

我发现life.actions()返回树中的每个操作,而它应该返回none。当我只想“结婚”、“生孩子”和“退休”时,life.projects()返回每个项目,甚至是子项目。我到底做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-07-25 01:29:29

问题出在项目的初始化上:

代码语言:javascript
复制
 __init__(self, name, children=[]):

您只获得一个列表,该列表由您创建的所有项目共享,而不传递子项的值。有关说明,请参阅here。相反,您希望将缺省值设置为None,并在值为None时初始化一个空列表。

代码语言:javascript
复制
 __init__(self, name, children=None):
    if children is None:
       children = []
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1180876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档