A basic Object Orientated REPL Implementation
Looks quite good to me! There's some things I think you could improve:


When a user hits Ctrl-C, the program flow is suddenly interrupted. The call to sys.exit should use 1 as a status code to indicate that something went wrong.
The REPL prompt is currently hardcoded, but you could easily change Reple's signature to allow a custom prompt:

class Reple(object):
    def __init__(self, evaluator=DEFAULT_EVALUATOR, prompt=PS1):
        self.prompt = prompt


On that note, PS1 is a bit ambiguous, maybe rename it to DEFAULT_PROMPT.
This is more of a design argument, but in my opinion it would make more sense to have run call evaluate, making evaluator superfluous; in pseudocode:

while true
    read from stdin
    evaluate(expression)


And in Python:

class Reple(object):
    ...

    def run(self):
        while 1:
            try:
                expression = input(self.prompt)
            except KeyboardInterrupt:
                sys.exit(1)
            else:
                self.evaluate(expression=expression)

    def evaluate(self, expression):
        raise NotImplementedError("This method must be implemented in a derived class")

You can use abc.ABCMeta together with abc.abstractmethod to provide 'truly' abstract methods:

import abc

class Reple(object, metaclass=abc.ABCMeta):
    ...

    @abc.abstractmethod
    def evaluate(self, expression):
        return


And here's a Python 2 version:

import abc

class Reple(object):
    __metaclass__ = abc.ABCMeta
    ...

    @abc.abstractmethod
    def evaluate(self, expression):
        return

You don't have any docstrings, so it's hard to tell what certain methods do or how they should be implemented by subclasses of Reple.