これは続きのone of my previous questionsGTDアプリのコンポジットパターン
ここは私のクラスです。
#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
これは私が抱えている問題です。いくつかの小さなプロジェクトで大きなプロジェクトを構築すると、そのプロジェクトが何であるか、現在のプロジェクトのアクションを見たいと思っていますが、私はそのすべてをツリーに入れています。ここでは、私が使用しているテストコードを紹介します(別の方法で動作するかどうかをテストするプロジェクトとアクションを追加するためのいくつかの方法を意図的に選択しました)。
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)
人生にはいくつかのプロジェクトがあり、その中にはいくつかのプロジェクトがあります。 (インデントは、プロジェクトがあると-'sはアクションである)の構造は、
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()は、「Get Married」、「Have Have」、「Retire」だけを必要とするすべてのプロジェクト、サブプロジェクトさえも返しています。私が間違っているのは何ですか?
良い例。今私は妻が二度目に妊娠したら何をすべきかを知っています。ドリンクとギターを弾く私のGTDキャプチャツールでそれを書き留めてください。 :) –