これは私の以前の質問の続きです
これが私のクラスです。
#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)
人生にはいくつかのプロジェクトがあり、その中にいくつかのプロジェクトがあるはずです。構造は次のようになります (インデントはプロジェクトで、- はアクションです)。
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() がツリー内のすべてのアクションを返すはずなのに、何も返さないということです。life.projects() は、「結婚する」、「子供を持つ」、「退職する」だけが必要な場合に、サブプロジェクトを含むすべてのプロジェクトを返します。私が間違っているのは何ですか?