class B(A):
    pass


class C(object):
    pass

@multimethod(A, A)
def foo(arg1, arg2):
    print('works')
foo(A(), A())
foo(A(), B())
foo(C(), B())
Динамическая диспетчеризация и наследование в python