Всегда ли нужно писать геттеры?
Читайте что такое инкапсуляция и зачем она нужна.
Внутри класса обращайтесь напрямую. Снаружи класса - принято обращаться через геттеры/сеттеры - чтобы если вдруг вы будете что-то внутри класса менять, вам не нужно было искать где используется ваш класс и как исправить все эти вызовы - вы просто поправите геттер/сеттер в вашем классе.
Желательно конечно всегда... Это закон инкапсуляции, нежелательно если бы какой то рандомный человек изменил поле в вашем классе. Так что это по вашему усмотрению, когда у мея были маленькие знания языков, я тоже думал - "зачем это ООП? Зачем инкапсуляция вообще бред", а сейчас я понимаю зачем оно. Просто учитесь и в ходе изучения как и я поймёте всё. Ответ на ваш вопрос - надо. Геттеры и сеттеры всегда нужны. Это как ловить ошибки. (try, except)