【问题标题】:Making a more pythonic wrapper around a non-pythonic class [closed]围绕非pythonic类制作更pythonic的包装器[关闭]
【发布时间】:2014-12-11 11:47:50
【问题描述】:

我将在我的项目中使用一个名为 socket.io-python-emitter (https://github.com/ziyasal/socket.io-python-emitter) 的库,但是它引入的语法确实让我很困扰..

示例用法:

e = Emitter(...)
e.Emit('message')
e.In('group1').Emit('message')
e.In('group1').In('group2').Emit('message')
e.Of("/ns").In('group1').In('group2').Emit('message')

我猜作者这样做是为了让 JavaScript/node.js 的人更有宾至如归的感觉,但这确实让编写动态发射器变得更加困难..

最终,应该是(至少在我看来):

e = Emitter(...)
e.emit('message')
e.emit('message', groups=['group1'])
e.emit('message', groups=['group1', 'group2'])
e.emit('message', groups=['group1', 'group2'], ns='/ns')

最好的方法是什么?

  • 围绕这个库创建一个包装器?这样的接缝会很丑……
  • fork 项目并创建“pythonic”版本?更丑陋,和重复.. 真的不想这样做。
  • 提交补丁以向上游项目添加pythonic方式?

【问题讨论】:

  • 这是一个相当 small script 的代码,并且大部分代码看起来像是对 redis.publish 的薄包装。我只需创建自己的类来包装 redis 并按照我想要的方式工作。
  • 平面比嵌套好。

标签: python wrapper


【解决方案1】:

您的第三个选项似乎(当然对我来说)是个好方法。我会先与作者/维护者交谈,了解他们对这个想法的看法。

由于您创建了一个新方法(并且无论如何都使用关键字参数),因此两种语法可以共存,所以我认为没有必要分叉项目或创建包装器。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
相关资源
最近更新 更多