За это отвечает файл, путь к которому задан в переменной окружения PYTHONSTARTUP
В Linux это делается так: создаете файл .pythonrc(можно другое название), в него пишите импорты и другой код, который при запуске будет в интерпретаторе и пишите в консоли такое: export PYTHONSTARTUP=~/.pythonrc Можно еще это добавить в .bashrc, что бы не прописывать в консоли каждый раз. Windows под рукой нет, поэтому гуглите "Windows PYTHONSTARTUP".
Паттерн который позволяет избавиться от if-ов называется Factory. Есть разные способы его реализации. Основная идея в том, что есть класс FunctionFactory который хранит map name->createFunc. Где createFunc это функция которая создает нужный экземпляр. Но этот map тоже нужно заполнить, поэтому совсем не писать лишний код не получится.
Это все безобразие позволяет не иметь огромной функции которая знает про все зарегистрированные классы.
Указатель занимает 8 байт (64 битные системы), объект обычно больше. Соответственно, все операции с объектами занимают времени больше, чем с указателями.