如何在继承的类中使用主对象类的__init__?

时间:2016-09-26 01:27:34

标签: python python-2.7 oop inheritance

我有一个程序,我将使用继承:

class Templates(object):

    def __init__(self, esd_user, start_date,
                 summary, ticket_number, email_type):
        self.esd = esd_user
        self.strt_day = start_date
        self.sum = summary
        self.ticket = ticket_number
        self.email = email_type

    def gather_intel(self):
        if self.email == "pend":
            PendingEmail(self.esd, self.ticket,
                         self.strt_day)
        elif self.email == "generic":
            GenericEmail(self.esd, self.ticket,
                         self.strt_day)
        elif self.email == "resolve":
            ResolveEmail(self.esd, self.ticket,
                         self.strt_day)
        elif self.email == "osha":
            OshaEmail(self.esd, self.ticket,
                      self.strt_day)
        else:
            return False


class PendingEmail(Templates):
    pass


class GenericEmail(Templates):
    pass


class ResolveEmail(Templates):
    pass


class OshaEmail(Templates):
    pass

我是否可以使用__init__类中的Templates作为其他继承类的__init__,而无需重写__init__方法?这里是否需要拨打super

例如,这是从主__init__类继承Templates函数的正确方法吗?

class PendingEmail(Templates):

    def __init__(self):
        super(Templates, self).__init__()

3 个答案:

答案 0 :(得分:1)

如果您不需要为子类的__init__添加任何内容,只是不要实现它,它们将自动继承它。否则,对于需要进一步初始化的情况,您会有点休息:

class PendingEmail(Templates):

    def __init__(self):
        super(PendingEmail, self).__init__()  # Name your own class, not the super class

答案 1 :(得分:0)

与任何其他方法一样,类会自动从其超类继承__init__。你想要实现的目标已经发生。

答案 2 :(得分:0)

如果您未在子类中定义__init__方法,则仍会调用基类__init__。如果你定义了一个,那么你需要像你在任何其他需要的行动之前/之后所描述的那样明确地调用它。 super的第一个参数是调用它的类。