Абстрактный метод Python с собственной функцией __init__

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

Как правильно использовать функции, импортированные в базовый класс абстрактного класса? Например: в 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. Как я могу это сделать?


person user2694306    schedule 28.05.2015    source источник


Ответы (1)


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

class DietPizza(BasePizza):
    def __init__(self):
        super().__init__()
        self.lastname = "Last Name"
person Martijn Pieters    schedule 28.05.2015
comment
Отлично, спасибо за ответ. Я приму его через 10 минут, когда мне позволят. - person user2694306; 28.05.2015
comment
Вам не нужно указывать вызывающий объект и класс, т.е. super(DietPizza, self).__init__()? - person BoltzmannBrain; 30.09.2016
comment
@BoltzmannBrain: Нет в Python 3, нет. - person Martijn Pieters; 30.09.2016
comment
@MartijnPieters touché, спасибо. - person BoltzmannBrain; 30.09.2016