Indeed the code is working as intended in python 2, but not in 3. A possible fix in python 3 would be the following:
class FakeNumber:
def __init__(self, i):
self.i = i
def __imul__(self, B):
self.i = self.i * B.i
return self
a = FakeNumber(5)
b = FakeNumber(6)
a *= b