метод цепочки в питоне
(не путать с itertools.chain)
Я читал следующее: http://en.wikipedia.org/wiki/Method_chaining
Мой вопрос:what is the best way to implement method chaining in 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
?