Разработка Python API: свободный интерфейс или аргументы - PullRequest
22 голосов
/ 07 октября 2010

Я играю с простым портом Protovis API для 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?

1 Ответ

22 голосов
/ 07 октября 2010

Мой голос - анти-цепочки, про-именованные параметры.

  1. точка-цепочка приводит к плохому интеллектуальному значению, так как эмпирический прототип - просто пустая Panel () или Bar(), вы, конечно, можете использовать pydoc, но в настоящее время Intellisense доступен в большинстве сред IDE и значительно повышает производительность.

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

  3. Объединение в цепочку затрудняет чтение кода, потому что неизбежно кто-то сделает все это в одной строке, и удивится, почему все обманывают, когда они дважды передают один и тот же параметр - вы можете предотвратитьчто, но с именованным конструктором param в основном встроена фильтрация дупла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...