Шаблон для многих параметров

#python #python-3.x #design-patterns

#python #python-3.x #шаблоны проектирования

Вопрос:

Я создаю приложение с одной точкой входа, у пользователя приложения есть 10 параметров для заполнения, только 3 являются необязательными. Эти параметры заполняются в объекте с именем ContextConfig . При запуске приложения для 3 объектов доставляются 10 параметров, а разные объекты принимают повторяющиеся параметры, есть ли какой-либо шаблон для этого?

 class DeltaContext:
    def __init__(self, delta_context: DeltaContextConfig):

        self.delta_context = delta_context

        self.hive_operations = HiveOperations(
            hive_config=HiveConfig(
                spark_df=self.delta_context.spark_df,
                table_name=self.delta_context.table_name,
                database_name=self.delta_context.database_name,
                partition_column=self.delta_context.partition_column,
                destination_path=self.delta_context.destination_path,
                spark_context=self.delta_context.spark_context,
            )
        )
        self.delta_writer = DeltaWriter(
            delta_write_config=DeltaWriteConfig(
                spark_df=self.delta_context.spark_df,
                column_to_order=self.delta_context.column_to_order,
                destination_path=self.delta_context.destination_path,
                partition_column=self.delta_context.partition_column,
                primary_key=self.delta_context.primary_key,
                files_count_first_batch=self.delta_context.files_count_first_batch,
                spark_context=delta_context.spark_context,
                operation_type=delta_context.operation_type,
                update_condition=delta_context.update_condition,
                set_expression=delta_context.set_expression
            )
        )
        self.auto_compaction = AutoCompaction(
            auto_compaction_config=AutoCompactionConfig(
                spark_context=self.delta_context.spark_context,
                destination_path=self.delta_context.destination_path,
                partition_column=self.delta_context.partition_column,
                ideal_file_size=self.delta_context.ideal_file_size,
                compaction_interval_time=self.delta_context.compaction_interval_time,
            )
        )
 

Как я могу сделать это лучше?

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

1. Заставьте другие конструкторы принять a DeltaContextConfig и извлечь части, относящиеся к ним.

2. Но это хороший параметр передачи шаблона, который не будет использоваться?

3. Вы передадите только один параметр, который имеет много атрибутов. Когда вы пишете метод, беспокоитесь ли вы обо всех атрибутах класса, который он не использует?

4. Я чувствую, что что-то подобное **kwargs может быть полезно здесь во всех классах (и начальном вводе). Таким образом, набор записей одинаков для всего, но вы используете только то, что имеет отношение к делу

5. Может быть, лучше создать, например, фабрику автокомпакции, которая получает DeltaContextConfig и возвращает автокомпакцию?