Creating and using a list of functions

In the fractal assignment, it is structured to use lists of functions. The following example demonstrates how this is done. The TwoCounter class contains two integer values. Objects of this class can be mutated by the functions upOne, downOne, upTwo, and downTwo. In the function applyAll(), a TwoCounter object and a list whose values consist of these four functions are the parameters. In the loop, each function from the function list is applied to the TwoCounter object. Data from that object is then stored in an output list. The function test() shows how applyAll() can be used, including example parameters.
class TwoCounter(object):
    def __init__(self):
        self.count1 = 0
        self.count2 = 0
        
def upOne(c2):
    c2.count1 += 1
    
def downOne(c2):
    c2.count1 -= 1
    
def upTwo(c2):
    c2.count2 += 1
    
def downTwo(c2):
    c2.count2 -= 1
    
def applyAll(c2, funcs):
    result = []
    for f in funcs:
        f(c2)
        result.append((c2.count1, c2.count2))
    return result

def test():
    c2 = TwoCounter()
    data = applyAll(c2, [upOne, upTwo, upOne, downTwo, upOne, upTwo, downOne])
    print(data)