Подтвердить что ты не робот

Проектирование API Python: свободный интерфейс или аргументы

Я играю с простым портом API Protovis для Python.

Рассмотрим пример простой гистограммы, в Javascript:

var vis = new pv.Panel()
    .width(150)
    .height(150);

vis.add(pv.Bar)
    .data([1, 1.2, 1.7, 1.5, .7, .3])
    .width(20)
    .height(function(d) d * 80)
    .bottom(0)
    .left(function() this.index * 25);

vis.render();

Я обсуждаю, продолжать ли использовать этот свободный интерфейс API интерфейса или использовать именованные параметры. С помощью названных параметров мы могли бы написать:

vis = pv.Panel(width=150,
               height=150)

vis = vis + pv.Bar(data=[1, 1.2],
                   width=20,
                   height=lambda d: d * 80,
                   bottom=0,
                   left=lambda: self.index * 25)
vis.render()

Есть ли предпочтительный стиль Python?

4b9b3361

Ответ 1

Мое голосование - это anti-chaining, pro-named-params.

  • dot-chaining делает плохой код-intellisense, поскольку эмпирический прототип представляет собой просто пустую панель() или Bar(), вы можете, конечно, pydoc на ней, но в этот день и возраст intellisense доступен в большинстве IDE и большой ускоритель производительности.

  • Цепочки делает программным вызов класса намного сложнее. Очень приятно иметь возможность проходить в списке или dict как * args, ** kwargs - хотя возможно с цепочкой вы в основном должны поддерживать оба метода или кучу backflips для мета-создания класса.

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