Methodenverkettung in Python
(nicht zu verwechseln mit itertools.chain)
Ich habe folgendes gelesen:http://en.wikipedia.org/wiki/Method_chaining
Meine Frage ist:Was ist der beste Weg, um Methodenverkettung in Python zu implementieren?
Hier ist mein Versuch:
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]
"""
Ein Problem ist, wenn Sie anrufenmethod(*args)
ändertself.o
kehrt aber nicht zurückNone
. (dann soll ich zurückkehrenself
oder was zurückgebenmethod(*args)
kehrt zurück).
Hat jemand bessere Möglichkeiten, Verkettungen zu implementieren? Es gibt wahrscheinlich viele Möglichkeiten, dies zu tun.
Sollte ich nur davon ausgehen, dass eine Methode immer zurückkehrtNone
so kann ich immer zurückkehrenself.o
?