为了避免在架构决策中迷失方向,我将用一个类似的例子来问:
假设我想要这样的Python类模式:
queue = TaskQueue(broker_conn)
queue.region("DFW").task(fn, "some arg")
这里的问题是如何让一个设计类能够以这种方式“链接”某些方法。在
task()
需要访问queue
类实例属性,task
的操作依赖于region()
的输出。在
我看到SQLalchemy做到了这一点(见下文),但在挖掘他们的代码和隔离这个模式方面有困难。在
^{pr2}$
Tags:
只需从
region
方法返回当前对象,如下所示由于
region
返回具有task
函数的当前对象,现在可以进行链接。在注意:
作为@chepnermentioned in the comments section,请确保}进行了更改。在
region
对对象{SQLAlchemy在这种调用上生成一个克隆,参见^{} method ,它只返回当前对象的一个克隆。在
在每次生成方法调用(例如
.filter()
、.orderby()
等)时,都会返回一个新的克隆,并更改特定的方面(例如展开的查询树等)。在SQLAlchemy使用^{} decorator 标记必须操作的方法并在此处返回一个克隆,用
self
替换生成的克隆。在在自己的代码中使用此模式非常简单:
对
.region()
或.task()
的每次调用都将生成一个克隆,修饰方法通过改变状态来更新克隆。然后返回克隆,保留原始实例对象不变。在相关问题 更多 >
编程相关推荐