Як ваш код використовують розробники? Іншими словами, що саме вони роблять, щоб визначити, які аргументи слід використовувати і як?
Якщо вони покладаються на документацію, автоматично сформовану з вашого коду, і генератор не має поняття, що з цим робити **kwargs
, це справді проблематично. Замість того, щоб знайти перелік аргументів та їх значення в документації, вони не мають абсолютно ніякої інформації, окрім розпливчастого «це потребує деяких аргументів».
Можливо, ця проблема може бути вирішена шляхом документування методу вручну, заміни автоматично створеної документації. Це вимагає додаткової роботи від реалізатора методу, але пам’ятайте, що код (та його документація) читається набагато частіше, ніж написано.
Якщо код - це їх документація, розробники, які використовують метод, **kwargs
потребують двох додаткових кроків: їм потрібно не тільки подивитися на підпис методу, але і на його фактичну реалізацію, щоб знайти інший метод, який він насправді викликає. Потім їм потрібно перейти до цього іншого методу, щоб нарешті знайти те, що шукали.
Це не вимагає великих зусиль, але все-таки зусилля потрібно повторювати знову і знову. Найгірше те, що ви не можете їм допомогти, додавши документацію: якщо ви коментуєте свій метод, перераховуючи фактичні аргументи, є великий ризик, що наступна версія бібліотеки, яку ви називає ваш метод, матиме різні аргументи, і ваша документація буде бути застарілим, оскільки ніхто не згадає, що його потрібно постійно оновлювати.
Моя рекомендація - покладатися **kwargs
лише на методи, які мають обмежений обсяг. Приватні методи (і приватні в контексті Python, я маю на увазі методи, починаючи від _
), які використовуються в кількох місцях класу, є хорошими кандидатами, наприклад. З іншого боку, методи, якими користуються десятки класів по всій кодовій базі, є дуже поганими кандидатами.
Зрештою, не слід забирати занадто багато зусиль, щоб переписати аргументи методу, який ви викликаєте, у межах написаного методу. Сподіваємось, більшість методів не мають більше шести-восьми аргументів, і якщо вони є, запитайте себе, чи не слід ви переробляти код. У всіх випадках:
Здійснення явних аргументів у вашому методі не вимагає великих зусиль,
Пізніше ви можете все-таки підтвердити аргументи (хоча якщо ви покладаєтесь лише на цьому, щоб зробити аргументи явними, ви порушите YAGNI).