2010-10-07 12 views
21

Używam prostego portu interfejsu API Protovis do Pythona.Projektowanie interfejsu API języka Python: Płynny interfejs lub argumenty

Rozważmy prosty przykład wykres słupkowy, w 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(); 

Ja zastanawiając się, czy nadal korzystać z tej płynny styl interfejsu API lub zamiast używać nazwanych parametrów. Przy nazwanych parametrach możemy napisać:

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() 

Czy jest preferowany styl Python?

+0

Interesujące. Widziałem oba. Dla np. Django używa zarówno łańcuchów metod, jak i argumentów słów kluczowych. –

+1

Może to tylko ja, ale myślę, że to zarówno brzydka: P – poke

+1

Zaletą składni słowa kluczowego jest to, że można użyć czegoś takiego jak 'pv.Bar (** kwargs)' łatwiej niż przy płynnym API. Ponadto, jak widziałem to w JavaScript z jQuery, użytych jest wiele anonimowych funkcji - nie mapują one dobrze do Pythona. –

Odpowiedz

21

Mój głos jest przeciwny do łańcuchów, nazwany-params.

  1. dot-łańcuchowym sprawia słabej code-intellisense od empiryczny prototyp jest tylko pustym panelu() lub bar(), można oczywiście pydoc na nim, ale w dzisiejszych czasach intellisense jest dostępny w większość IDE i wielki wzrost wydajności.

  2. Łańcuchowanie powoduje, że programowanie jest znacznie trudniejsze. Bardzo miło jest móc przekazać listę lub dyktować jako * args, ** kwargs - podczas gdy możliwe z łańcuchem, musisz w zasadzie obsługiwać obie metody lub grupę backflipów, aby meta-stworzyć klasę.

  3. Chaining czyni kod bardziej trudne do odczytania, ponieważ nieuchronnie ktoś zrobi to wszystko w jednej linii, i zastanawiam się, dlaczego rzeczy są goofed się, kiedy już przeszła w tym samym param dwukrotnie - można temu zapobiec, ale z nazwany konstruktor paramowy filtrowanie dup jest w zasadzie wbudowane.

Powiązane problemy