I tried to use multimethod module from peers package available at http://viral.media.mit.edu/peers/peers-0.20050929.tar.gz to create several __mul__ operators in a new-style class and experienced this problem. In new-style class I can't change the attribute __op__. Even if I change it with setattr, genuine __op__ will be called. For instance, if I set __mul__ operator to method object new_mul and write setattr(obj, '__mul__', new_mul) obj *= 1 # __mul__ will be called. # But obj.__mul__(1) # new_mul will be called. With common methods and with old-style classes all works properly. P.S. Sorry for my English