类从同一类继承



我是python 2.7的新手,几个小时以来一直在寻找这个问题的答案,所以我想我应该在这里问我关于溢出的第一个问题。我希望有一天能为社区增添一些东西,而不是一直潜伏><

我正在创建一个项目管理工具,在该工具中,您可以在项目下定义必要的基本任务,以及从基本任务继承的其他子任务。我认为为了获得最大的灵活性,最好在项目类下创建一个通用的任务类

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

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

这就是我陷入困境的地方——我有一些想法,但没有深度通过看到它们

所以我的问题是什么是处理继承的"好"方法?有什么神奇的方法可以帮助我们吗?

您似乎建议每个子任务都应该是从Task派生的新类的实例。如果是这样,我建议避免这种做法。您试图创建的内容可以很容易地通过Task实例树进行建模,其中每个任务对象都包含子任务(子任务)的列表(可能为空)。然后,您可以通过递归迭代子任务列表来计算任务所需的时间,以累积特定任务下叶节点中的时间(即Hours方法中的else子句)。

在某个时候,您可能有充分的理由定义从Task派生的一类新任务,但前提是它们有某种特殊的行为,例如,它们的时间是如何计算的。

为了惯例,我将调用您的"基本任务"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是由许多SubTask

组成的

最新更新