设计Python API:Fluent接口或参数

Tri*_*tan 22 python interface-design

我正在玩一个简单的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();
Run Code Online (Sandbox Code Playgroud)

我在争论是否继续使用这种流畅的界面风格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()
Run Code Online (Sandbox Code Playgroud)

是否有首选的Python风格?

syn*_*tel 22

我的投票是反链接,亲命名为params.

  1. 由于经验原型只是一个空的Panel()或Bar(),因此dot-chaining会导致代码 - 智能感觉不佳,你当然可以使用pydoc,但是在这个时代,intellisense在大多数IDE中都可用并且生产效率很高.

  2. Chaining以编程方式调用课程变得更加困难.能够传入列表或字典作为*args,**kwargs是非常好的 - 虽然可能通过链接你基本上必须支持两种方法或一堆后空翻来创建类.

  3. 链接使代码更难以阅读,因为不可避免地有人会在一行中完成所有操作,并且想知道为什么当它们在同一个参数中传递两次时所有事情都被搞砸了 - 你可以使用命名的param构造函数重复过滤来阻止它基本上是内置的.