As Ashwini says, "Special methods are looked up in class not instances".
So the following would work as you expect (although I can't imagine why you would want to):
class Estimator(object):
name = None
def __init__(self):
self.__class__.__call__ = self.__class__._call
class Mean(Estimator):
name = 'mean'
def _call(self, data):
return np.mean(data)