Нужно ли явно инициализировать все поля экземпляра класса в конструкторе?
Мой вопрос скорее не технический, а из разряда хороших практик.
В статичных языках типа C#, С++, Rust, структура класса (т.е. набор полей) задается явно. Это дает ясную картину того какие поля есть. В Python атрибут к экземпляру можно добавить в любом методе экземпляра. Так вот вопрос: Нужно ли явно инициализировать все поля экземпляра класса в конструкторе значениями, даже если эти значения фиктивные?
Если нет, то получается, что картина того какие поля есть (или будут) разбросана по методам и четкого представления нет. Либо же надо писать какой-то гигантский комментарий с перечислением полей.
Чтобы вы посоветовали?
Тут пригодится принцип наименьшего удивления.
Ситуация, когда набор атрибутов у объекта различается в зависимости от вызванных до
этого методов - более удивительна, чем ситуация, когда набор атрибутов один и тот же, просто часть из них имеет значения по умолчанию.