Передача частных атрибутов в функцию полезности ⇐ Python
Передача частных атрибутов в функцию полезности
У меня есть 3 класса с операцией слияния, которая выполняет одинаковые операции с разными аргументами.
Вот скелет того, чем я сейчас занимаюсь:
класс FirstClass: защита __init__(сам): # определяем конструктор def merge(сам, другое): # объединить другого с собой merge_util(src=other, dest=self) класс ВторойКласс: защита __init__(сам): # определяем конструктор def merge(сам, другое): # объединить другого с собой merge_util(src=other, dest=self) # Третий класс определен одинаково merge_util определяется следующим образом:
def merge_util(src, dest): # объединить частные атрибуты src (массив, список и таблицу базы данных) в dest Проблема в том, что этот дизайн нарушает инкапсуляцию. Внешняя функция обращается к частным/защищенным атрибутам.
Я придумал два решения:
[*]
Определите merge_util как метод каждого класса, но тогда я буду дублировать код для каждого класса.
[*]
Используйте наследование. В остальном эти классы имеют мало общего, поэтому я не использовал наследование с самого начала и хочу этого избежать.
Есть ли другие подходы, которые я могу рассмотреть?
У меня есть 3 класса с операцией слияния, которая выполняет одинаковые операции с разными аргументами.
Вот скелет того, чем я сейчас занимаюсь:
класс FirstClass: защита __init__(сам): # определяем конструктор def merge(сам, другое): # объединить другого с собой merge_util(src=other, dest=self) класс ВторойКласс: защита __init__(сам): # определяем конструктор def merge(сам, другое): # объединить другого с собой merge_util(src=other, dest=self) # Третий класс определен одинаково merge_util определяется следующим образом:
def merge_util(src, dest): # объединить частные атрибуты src (массив, список и таблицу базы данных) в dest Проблема в том, что этот дизайн нарушает инкапсуляцию. Внешняя функция обращается к частным/защищенным атрибутам.
Я придумал два решения:
[*]
Определите merge_util как метод каждого класса, но тогда я буду дублировать код для каждого класса.
[*]
Используйте наследование. В остальном эти классы имеют мало общего, поэтому я не использовал наследование с самого начала и хочу этого избежать.
Есть ли другие подходы, которые я могу рассмотреть?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Пример полезности спецификатора формата G9 в C# для округления чисел с плавающей запятой?
Anonymous » » в форуме C# - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-