Karazuba Algorithm with arbitrary bases
Combine division and modulus

Use https://docs.python.org/3/library/functions.html#divmod

rather than this:

    digits.append(int(n % b))
    n //= b


Replace loop with sum

This

res = 0
for index, i in enumerate(reversed(n)):
    res += int(i) * b ** index
return res


is a good candidate for conversion to a generator, i.e.

return sum(int(i) * b**index for index, i in enumerate(reversed(n)))


However, you can get rid of that reversed if you change the power index to be len(n) - index.

Imports at the top

Move this:

from math import log2, ceil, log10, floor


to the top of your file.

Don't compare types

Rather than this:

if type(num) == list:


use isinstance.

Member mutability

You shouldn't care that num is coming in as a list; you should only check that it's iterable. And store it as a tuple, not a list, because you don't (and shouldn't) mutate it in your class code.

Call reversed once

This:

zip(reversed(self.digits), reversed(o.digits))


should be

reversed(tuple(zip(self.digits, o.digits)))


The inner tuple is required because reversed does not accept an iterator.

Don't use strings for math

Just don't. This:

a.digits, b.digits = ['0']


is not a good idea. Use actual digits whenever possible, and it is possible here.