Как я могу сделать наследование с тремя уровнями (отец, ребенок, внук)

#python #inheritance #python-2.x

#python #наследование #python-2.x

Вопрос:

У меня есть

 from abc import ABCMeta, abstractmethod


class Operation(object):
    __metaclass__ = ABCMeta

    def __init__(self, a, use_sftp):
        print "OPERATION"

        self.a = a
        self.use_sftp = use_sftp
        self.y = 5

    @abstractmethod
    def execute(self):
        pass


class OperationExecutor(object):
    def __init__(self, a, use_sftp):
        print "EXECUTOR"

        self.a = a
        self.use_sftp = use_sftp

    def batatas(self, operation):
        op = operation(self.a, self.use_sftp)
        return op.execute()


class FTP(Operation):
    __metaclass__ = ABCMeta

    def __init__(self, a, use_sftp):
        print "FTP"

        self.op = super(FTP, self).__init__(a, use_sftp)
        self.b = 2
        self.c = 3
        self.x = 10

    def execute(self):
        if self.use_sftp:
            return SFTP(self.a, self.use_sftp).execute()
        else:
            return LFTP(self.a, self.use_sftp).execute()


class SFTP(FTP):
    def execute(self):
        return self.a   self.b   self.c   self.x   self.y


class LFTP(FTP):
    def execute(self):
        return self.a * self.b * self.c * self.x * self.y


def main():
    executor = OperationExecutor(1, True)
    print executor.batatas(FTP)


if __name__ == '__main__':
    main()

 

я хочу выполнить в следующем порядке:

ИСПОЛНИТЕЛЬ, FTP, ОПЕРАЦИЯ

или аналогичный, но у меня есть следующее:

ИСПОЛНИТЕЛЬ, FTP, ОПЕРАЦИЯ, FTP, ОПЕРАЦИЯ

Это потому, что «init» вызывается дважды. Я не хочу, чтобы «инициализация» выполнялась более одного раза

Операция (отец) —> FTP (дочерний) —> SFTP / LFTP (внук)

Комментарии:

1. Как вы представляете себе запуск __init__ только один раз, когда вы специально создаете два объекта класса? Это противоречие.

2. Используете ли вы Python 2? Вы почти наверняка должны пометить его тегом Python-2, Python 2 находится за пределами его срока службы, и предполагается, что вы будете использовать Python 3, если не указано иное, в настоящее время.

3. возможно, вам следует использовать FTP только as Factory для создания SFTP or LFTP . Википедия: Фабричный шаблон