I have a class with some built-in methods. This is a abstracted example of what the class might look like:
class Foo:
def __init__(self):
self.a = 0
self.b = 0
def addOneToA(self):
self.a += 1
def addOneToB(self):
self.b += 1
For the sake of simplicity, I've reduced the built-in methods to 2 total, but in actuality my class has closer to 20.
Next I have another class that is designed to work on a list of Foo
instances.
class Bar:
def __init__(self, fooInstances):
self.fooInstances = fooInstances
# Bar([Foo(), Foo(), Foo()])
What if I wanted to apply one of the Foo
methods to the Foo
instances in Bar
?
class Bar:
# ...
def addOneToA(self):
for fooInstance in self.fooInstances:
fooInstance.addOneToA()
def addOneToB(self):
for fooInstance in self.fooInstances:
fooInstance.addOneToB()
The example above is one way of doing what I described, but it seems like a great deal of repetitive code to do this if there were 20 class methods of Foo
. Alternatively, I could do something like this:
class Bar:
# ...
def applyFooMethod(self, func, *args):
for fooInstance in self.fooInstances:
fooInstance.func(args)
But I would prefer to have something that would allow me to call .addOneToA()
on Bar
and have it be applied to all Foo
instances in Bar
. Is there a clean way to do this without defining all methods of Foo
inside Bar
?