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 ?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage