Проблема с множественным наследованием Python

#python-3.x #class #inheritance

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

Вопрос:

У меня есть два базовых класса python, в которых они запрашивают данные с двух серверов с разными аргументами. Есть два производных класса, которые наследуют от этих базовых классов и переопределяют запрос данных. Поскольку базовые классы не обеспечивают управление данными, они также добавляют функцию управления данными, которая абсолютно одинакова для обоих производных классов.

 class Base1():
    def request_data_base1(self, argument1, argument2):
        # Needs to be overridden by the derived class
        pass
#---------------------------------------------------------------------------------------------
class Base2():
    def request_data_base2(self, different_argument1, different_argument2, different_argument3):
        # Needs to be overridden by the derived class
        pass
  

Производные классы:

 class Derived1(Base1):
    # Derived1 inherits request_data from Base1, which is overridden here some new functionality
    def request_data_base1(self, argument1, argument2):
        # ...
        return
    
    # This method requests data and perform a data management
    def manage_data(self):
        # Using a method in Base1 request data
        self.request_data_base1(argument1, argument2)
        # perform data management
        # ...
        return
#---------------------------------------------------------------------------------------------
class Derived2(Base2):
    def __init__(self):
        pass
        
    # Derived2 inherits request_data from Base2, which is overridden here some new functionality
    # request_data_base2 is different from request_data_base1
    def request_data_base2(self, different_argument1, different_argument2, different_argument3):
        # connect to server and request data
        return
    
    def manage_data(self):
        self.request_data_base2(different_argument1, different_argument2, different_argument3)
        # perform data management
        # data management which is exactly the same as the data management that happens in Derived1
        # ...
        return
  

В обоих Derived1 Derived2 классах и метод manage_data :

  • своевременно запрашивать данные
  • выполняет управление данными после получения данных

Запрос данных в Derived1 и Derived2 отличается (потому Base1 что и Base2 требует разных аргументов), но функции управления данными точно такие же. Фактически, характер запроса данных также одинаков для двух производных классов, но они требуют разных аргументов.

Я хотел бы вывести это управление данными за пределы Derived1 и Derived2 путем создания третьего базового класса Base3 , который может быть унаследован Derived1 и Derived2 для функциональности управления данными.

Как я могу создать третий базовый класс для этой цели? Я думал о следующем.

 class Base3():
    # ...
    def request_data(self):
        # ...
        return
        
    def manage_data(self):
        # Do all the data management functionality
        return
  

что сделало бы производные классы следующими:

 class Derived1(Base1, Base3):
    def request_data_base1(self, argument1, argument2):
        # connect to server and request data
        return
    
    # manage_data is inheritted form Base3
    
class Derived2(Base2, Base3):
    def request_data_base2(self, different_argument1, different_argument2, different_argument3):
        # connect to server and request data
        return
    
    # manage_data is inheritted form Base3
    
  

Вопрос:

Как я должен перенести управление данными в отдельный класс таким образом, чтобы Derived1 и Derived2 переопределять только request_data функции и наследует manage_data от Base3 ?

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

1. Я не совсем понимаю, чего вы хотите достичь. Поскольку Base3 существует только для request_data , а не для manage_data , почему у него есть manage_data метод?

2. Моя цель — исключить manage_data из производных классов. На самом деле, я хочу manage_data быть полностью унаследованным от Base3 такого, Derived1 и Derived2 мне не нужно беспокоиться об управлении данными, если это имеет смысл.