2015-05-28 4 views
2

Как определить функцию __init__ как в базовом, так и в производном абстрактных классах и иметь все self.* в абстрактном методе? Например:  Python Abstract Method With Собственная функция __init__

Каков правильный способ использования функций, импортируемых в базовый класс абстрактного класса? Например: в base.py У меня есть следующие:

import abc 

class BasePizza(object): 
    __metaclass__ = abc.ABCMeta 
    def __init__(self): 
     self.firstname = "My Name" 

    @abc.abstractmethod 
    def get_ingredients(self): 
     """Returns the ingredient list.""" 

Тогда я определить метод в diet.py:

import base 

class DietPizza(base.BasePizza): 
    def __init__(self): 
     self.lastname = "Last Name" 

    @staticmethod 
    def get_ingredients(): 
     if functions.istrue(): 
      return True 
     else: 
      return False 

Однако, когда я бегу diet.py я только иметь доступ к self.lastname. Я бы хотел, чтобы DietPizza имел как self.firstname, так и self.lastname. Как я могу это сделать?

ответ

6

Ваш BasePizza.__init__ - конкретный метод; просто используйте его, используя super():

class DietPizza(BasePizza): 
    def __init__(self): 
     super().__init__() 
     self.lastname = "Last Name" 
+0

Отлично, спасибо за ответ. Я приму это через 10 минут, когда они меня отпустят. – user2694306

+1

Вам не нужно указывать вызывающий объект и класс, т. Е. 'Super (DietPizza, self) .__ init __()'? – BoltzmannBrain

+1

@BoltzmannBrain: Не в Python 3, нет. –