(不要与 itertools.chain 混淆)
我正在阅读以下内容: http ://en.wikipedia.org/wiki/Method_chaining
我的问题是: 在 python 中实现方法链的最佳方式是什么?
这是我的尝试:
class chain():
def __init__(self, my_object):
self.o = my_object
def __getattr__(self, attr):
x = getattr(self.o, attr)
if hasattr(x, '__call__'):
method = x
return lambda *args: self if method(*args) is None else method(*args)
else:
prop = x
return prop
list_ = chain([1, 2, 3, 0])
print list_.extend([9, 5]).sort().reverse()
"""
C:\Python27\python.exe C:/Users/Robert/PycharmProjects/contests/sof.py
[9, 5, 3, 2, 1, 0]
"""
一个问题是如果调用 method(*args)
修改 self.o
但不返回 None
。 (那么我应该返回 self
还是返回 method(*args)
返回的内容)。
有没有人有更好的方法来实现链接?可能有很多方法可以做到这一点。
我是否应该假设一个方法总是返回 None
所以我可能总是返回 self.o
?
原文由 Rusty Rob 发布,翻译遵循 CC BY-SA 4.0 许可协议
警告:这仅适用于不打算返回任何数据的
class
methods()。我一直在寻找类似于链接
Class
函数的东西,但没有找到好的答案,所以这就是我所做的,我认为这是一种非常简单的链接方式:只需返回self
对象。所以这是我的设置:
现在我可以为汽车命名并通过调用将其置于驱动状态:
希望这可以帮助!