Нужно ли проверять типы в Python?
Конечно, нужно, ведь мы ожидаем конкретные типы задавая параметры для функции. Можно проверять соответствие типам вручную, но есть альтернативный, более удобный и красивый, подход -- использование библиотеки pydantic, которая специализируется на валидации, а именно декоратор validate_arguments. Валидация помогает на ранних и даже на поздних этапах дебажить ошибки в логике вашего кода. Это очень помогает, даже если на проекте один человек.
 нужно ли проверять типы переменных, которые приходят в функцию?
def mnf_year(self, year: int):
Ну так вы уже их указали в сигнатуре. Ваше дело сделано. Вы сказали пользователям кода, что они обязаны передать вам int. Если они передадут вам что-то другое, то это уже их проблемы, что программа сломается. Проаннотировав тип, вы сняли с себя ответственность.