2

我对 python 2.7 非常陌生,并且已经为此寻找答案几个小时,所以我想我会在溢出时问我的第一个问题。我希望有一天能为社区增加一些东西,而不是一直潜伏>.<

我正在创建一个项目管理工具,您可以在其中定义一个项目下的 nessicary基本任务以及从基本任务继承的可能的其他子任务。我正在考虑最大的灵活性,最好在Project Class下创建一个通用的Task Class 。当用户想要创建子任务时,它继承自基本任务。我想为基本任务分配一个小时值,如果没有子任务是用户定义的,如果有子任务是由所有子任务定义的小时数之和定义的。

到目前为止,这就是我所拥有的......:

class Task(self, superOBJ):
    #Define Tasks That Conform To SOW Here
    def __init__(self,cls,title):
        self.title=title
        self.description=""
        self.hours=None
    def Hours(self):
        if #NO SUBTASKS
            return self.hours
        else:
            return #SUM OF SUBTASKHOURS

    def SetHours(self,super,hours):
        self.hours=hours

这就是我卡住的地方我有一些想法,但没有深入了解它们

所以我的问题是什么是处理继承的“好”方法?有没有什么神奇的方法可以帮上忙?

4

2 回答 2

2

看来您是在建议每个子任务应该是从Task. 如果是这样,我建议避免这种方法。您尝试创建的内容可以通过Task实例树轻松建模,其中每个任务对象都包含一个子任务(子任务)列表(可能为空)。然后,您可以通过递归遍历子任务列表来计算任务所需的时间,以累积特定任务下叶节点中的时间(即,else您的方法中的子句Hours)。

在某些时候,您可能有充分的理由定义派生自的新任务类别,Task但只有当它们具有与如何计算它们的时间有关的某种特殊行为时才应该这样做。

于 2013-02-06T18:10:19.360 回答
0

为 方便 起见, 我 将 为 你 的 "基本 任务"Task任务 的 基 类命名 类 . BaseTask

class BaseTask(object):
    '''change object to BaseProject whenever you figure out what your `Project`
    class should be, or if you need it at all'''

    def __init__(self, title):
        self.title = title
        self.description=""

class Task(BaseTask):
    def __init__(self, title):
        super(Task, self).__init__(title)
        self.subtasks = []
        self.default_hours = 1

    @property
    def hours(self):
        if len(self.subtasks) < 1:
            return self.default_hours
        return sum(subtask.hours for subtask in self.subtasks)

class SubTask(BaseTask):
    def __init__(self, title):
        super(SubTask, self).__init__(title)
        self.hours = 0

这基本上就是它应该的样子。您可以根据自己的喜好进行任何更改。通常,您应该了解继承组合之间的区别。在这里,TaskSubTask都继承自BaseTask,但是Task由许多s组成SubTask

于 2013-02-06T18:24:06.957 回答