2016-09-26 3 views
0

У меня есть программа, что я буду использовать наследование в:Как использовать __init__ из основного класса объекта в унаследованном классе?

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__() 

ответ

1

Если вам не нужно ничего добавлять к __init__ для подклассов, просто не реализовать, и они наследуют его автоматически. В противном случае, вы немного не в тех случаях, когда вам необходимо сделать дополнительную инициализацию:

class PendingEmail(Templates): 

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

Это делает гораздо больше смысла, я читал об этом, и по какой-то причине я просто не получал его. Спасибо! – Pyth0nicPenguin

0

Как и любой другой метод, классы автоматически наследуют __init__ от своих суперкласса. То, что вы хотите достичь, уже происходит.

0

Если вы не указали способ __init__ в своем подклассе, ваш базовый класс __init__ по-прежнему будет вызываться. Если вы определили один, вам нужно явно называть его, как вы описали до/после любых других действий, которые вам нужны. Первый аргумент super - это класс, в котором он называется.

Смежные вопросы