#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
мне не нужно беспокоиться об управлении данными, если это имеет смысл.