Ваши классы, которые наследуются от типов данных wxWidgets / wxPython, не должны реализовывать какую-либо бизнес-логику. wxWidgets - это библиотека GUI, поэтому любые подклассы wxApp или wxFrame должны оставаться сосредоточенными на GUI, то есть отображать интерфейс и реагировать на действия пользователя.
Код, который делает что-то полезное, должен быть отделен от wx, так как вы можете позже решить использовать его в каком-либо веб-приложении или консольном приложении, и вы не хотите создавать объект wxApp в таком случае. Позже вы также можете решить перенести некоторые вычисления в отдельные «рабочие потоки», в то время как ваш графический интерфейс будет реагировать на «основной поток» и перерисовываться должным образом во время длительных вычислений.
И последнее, но не менее важное: классы, которые инкапсулируют вашу логику, могут иметь тенденцию к росту в течение жизни проекта. Если они смешиваются с вашими классами GUI, они будут расти быстрее, и, наконец, они станут настолько сложными, что вы почти не сможете их отладить ...
Хотя их разделение приводит к чистому коду, когда вы не смешиваете ошибки в логике с ошибками в графическом интерфейсе (обновление / макетирование / индикатор выполнения и т. Д.). У такого подхода есть еще одна приятная особенность - возможность распределять работу между людьми с графическим интерфейсом и людьми с логикой, которые могут выполнять свою работу без постоянных конфликтов.