Python Forum
Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How do you do method chaining?
#5
If we rewrite the original class to be immutable (...as was my initial intention, but I wrote it fast), it becomes a little more clear why I'm aiming for this.

I guess using temporary variables or just having multiple filters/selectors on a single line is the way to go.

Here's probably a better example:
class query(object):
    def __init__(self, source, filters = ()):
        self.filters = filters
        self.source = source

    def where(self, filter):
        filters = self.filters + (filter, )
        new_query = query(self.source, filters)
        return new_query

    def __and__(self, other):
        filters = self.filters + other.filters
        return query(self.source, filters)

    def get(self):
        all_filters = lambda x: all(func(x) for func in self.filters)
        return list(filter(all_filters, self.source))

things = query(range(1000))

by_9 = things.where(lambda x: x % 9 == 0)

only_odd = things.where(lambda x: x % 2 != 0)
further_filtered = only_odd.where(lambda x: x % 3 == 0).where(lambda x: x % 7 == 0)

print((further_filtered & by_9).get())
# [63, 189, 315, 441, 567, 693, 819, 945]
Reply


Messages In This Thread
How do you do method chaining? - by nilamo - May-01-2017, 02:36 AM
RE: How do you do method chaining? - by Mekire - May-01-2017, 06:36 AM
RE: How do you do method chaining? - by nilamo - May-01-2017, 02:01 PM
RE: How do you do method chaining? - by volcano63 - May-01-2017, 04:06 PM
RE: How do you do method chaining? - by nilamo - May-01-2017, 04:34 PM
RE: How do you do method chaining? - by Mekire - May-01-2017, 10:19 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020