В качестве дополнительного примечания, хотя это и не рекомендуется, МОЖНО назначить другое значение для self.__class__
- будь то в __init__
или где-либо еще. Обратите внимание, что это изменит поиск имен на уровне класса (например, методов), но по сути это не изменит состояния экземпляра (и не будет вызывать неявный вызов любого рода инициализации - вам придется делать это явно, если вам нужно что должно произойти) ... эти тонкости являются частью того, почему такие уловки не особенно рекомендуются (наряду с общим культурным уклоном Pythonistas против "черной магии" ;-) и "фабричной функцией" (которая в особенно простых случаях может быть сводиться к поиску разборчивых, как в ответе GHZ) - рекомендуемый подход.