Can I add methods to class by condition and call them?

Solution 1:

I mean I believe this is what would generally be referred to as a bad idea, but... you could have an argument passed into the class's constructor and then define the behavior/existence of a function depending on that condition. Like So:

class foo():
    def __init__(self, condition):
        if condition:
            self.func = lambda : print('baz')
        else:
            self.func = lambda : print('bar')
    
if __name__ == '__main__':
    obj1 = foo(True)
    obj2 = foo(False)

    obj1.func()
    obj2.func()

Outputs:

baz
bar

You'd likely be better off just having different classes or setting up some sort of class hierarchy.