Ответы:
Это честно зависит от ваших потребностей. В большинстве случаев модуль функций будет тем, что вы ищете.
Классы Python (imho) не следует рассматривать как классы в C # или C ++ или Java, должна быть логическая причина для группировки набора функций в более крупного родителя, структуры данных были бы хорошим примером этого, вы хотите конгруэнтный набор функций, которые применяются непосредственно к классу вместо свободно собранного набора функций общего назначения.
Модуль предназначен для общей иерархической группировки похожих систем, у меня обычно все функции утилит в одном модуле, все данные в другом, мой уровень данных и коннекторы в модуле более «родительского» типа. Поскольку модуль - это просто ментальная группировка, речь идет не столько о типах систем, которые в нем присутствуют (классы или функции, честно говоря, вероятно, их комбинация), а о логических связях между системами в модуле.
Основной вопрос в том, нужны ли вам разные экземпляры вашего модуля / класса. модуль python подобен одиночному - вы всегда ссылаетесь на один и тот же объект, т. е. если вам нужны экземпляры, вам нужен класс.
Однако, если вам не нужны экземпляры, вам все равно может потребоваться установить ваш «объект» в исходное состояние. хотя это очевидно возможно с простым модулем, если инициализация более сложна, чем просто установка некоторых значений, я бы посоветовал иметь код инициализации в __init__
методе класса для удобства чтения.