I have a group of objects in python I'd like to sum without losing access to the functionality implemented in the objects.
To illustrate the point, consider this class:
class PlaneTicket:
def __init__(self, origin:str, destination:str):
...
def price(self, pricingDate:date)->float:
'''Returns the best price available on a given date'''
...
In my application I need to be able to sum these objects. You can think of it as having to create a journey that requires two plane tickets.
flight1 = PlaneTicket('london', 'new-york')
flight2 = PlaneTicket('new-york', 'paris')
journey = flight1 + flight2
Now, the interesting thing is, I also want to be able to use the methods in the underlying objects. Eg.
journey.price('2021-06-19')
# Should equal sum(flight.price('2021-06-19') for flight in journey.flights)
So, I could implement a class Journey and make the sum of PlaneTicket objects a Journey object, and also then implement a .price on the Journey class.
However, I may be missing a better solution as I'm sure this is a common problem. Moreover, I'd need different implementations of the Journey class if I'm summing, averaging, or multiplying the PlaneTicket objects.
I suppose the general formulation would be:
- I have a collection of objects that implement a method
foo() - I want to aggregate these objects (eg. summing them)
- I want to be able to call
fooon the aggregation and have the return values of the constituent objects aggregated.