(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]
"""
1 つの問題は、呼び出しがmethod(*args)
変更さself.o
れても返されない場合None
です。(その後、返すself
か、返すものをmethod(*args)
返す必要があります)。
チェーンを実装するより良い方法はありますか? おそらく多くの方法があります。
メソッドが常に返されると仮定するだけNone
でよいので、常に返される可能性がありself.o
ますか?