擅长:python、mysql、java
<p>您可以创建子项目成员,类似于您的操作列表,并以类似的方式将项目分配给它。项目没有子类化是必要的。在</p>
<pre><code>class Project:
def __init__(self, name, actions=[], subprojects=[]):
self.name = name
self.actions = actions
self.subprojects = subprojects
def add(self, action):
self.actions.append(action)
def add_project(self, project)
self.subprojects.append(project)
</code></pre>
<p>更好的是,您可能希望实现一个复合模式,其中项目是复合的,操作是叶子。在</p>
^{pr2}$
<p>这里的关键是项目与操作具有相同的接口(除了add/delete方法)。这允许递归地调用整个树上的方法。如果你有一个复杂的嵌套结构,你可以在顶层调用一个方法,并让它向下过滤到底层。在</p>
<p>如果你想要一个方法来获取树中所有叶节点的平面列表(Actions),你可以在Project类中实现这样的方法。在</p>
<pre><code>def get_action_list(self):
actions = []
for c in self.children:
if c.__class__ == self.__class__:
actions += c.get_action_list()
else:
actions.append(c)
return actions
</code></pre>