Instead of defining do_EOF(), add a precmd hook that maps "EOF" to "exit":
do_EOF()
def precmd(self, line): if line == "EOF": return "exit" return line