Понятный способ доступа к параметрам функций низкого уровня в функциях высокого уровня? - PullRequest
0 голосов
/ 08 октября 2018

Я написал пакет Python, который делает частые косвенные вызовы функции низкого уровня low_level_a(arg).Под косвенным я подразумеваю то, что функция часто скрыта за несколькими уровнями функций и классов более высокого уровня.

Теперь я хочу реализовать альтернативную версию функции, low_level_b(arg), которая принимает то же самоевид аргументов и возвращает те же виды результатов.Моя цель - позволить пользователю переключаться между использованием low_level_a(arg) и low_level_b(arg) при вызове функций самого высокого уровня.

Моя первая идея - написать необязательный аргумент для функции низкого уровня для переключения между версиями:low_level(arg, option='a').Однако, насколько я могу судить, это заставляет меня добавлять необязательный аргумент option='a' к каждой промежуточной функции, что потенциально приводит к вызову low_level.

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

Что является понятным и масштабируемым способом предоставления пользователю возможности выбирать различные версии параметров low_level?

1 Ответ

0 голосов
/ 08 октября 2018

Вы можете уменьшить многословие, упаковав все такие настройки «наречий» как атрибуты одного аргумента flags.(Часто удобно использовать тип namedtuple для их хранения и предоставления значений по умолчанию.)

Если промежуточные слои могут быть выражены как методы для небольшого числа классов, параметры могут быть сохранены как атрибуты, чье упоминаниеможет быть поглощено в self.(Для свободных функций, которые принимают опции стандартным способом, может быть создан вспомогательный класс, который предоставляет функции в виде методов через __getattr__ и предоставляет опции автоматически.)

...