Ну во-первых, что именно ты пытаешься сделать?
> firstnames = input("Введите ваше имя")
Ты присваиваешь введённое пользователем значение локальной переменной метода input_info() (точнее, его параметру). Питон не предусматривает передачу параметров по ссылке, так что это присвоенное значение никогда выйдет за пределы метода, и будет потеряно, когда метод завершится.
Далее, зачем while True + break? Чем не устроил простой return?
Наконец, я бы не стал вносить такие методы в тело класса. Пусть основная программа разбирается с вводом/выводом так, как ей этого хочется, класс, хранящий данные, этим заниматься не обязан.
class Umar():
def __init__(self, firstname, lastname, patronymic, age, birthday, jobs, car):
... # тут код инициализации класса
#эти функции можно сделать методами класса,
# но я бы рекомендовал оставить их вне класса,
# так как способы ввода/вывода варьируются чаще,
# чем способы хранения данных.
# красивый вывод содержимого класса
def pretty_print_umar(u: Umar):
print('Имя:', u.firstname)
... # ну и так далее
# ввод данных с клавиатуры и создание по ним экземпляра класса
def input_umar() -> Umar:
firstname = input('Введите имя [Enter - отмена]:')
if not firstname:
return
# и так далее для остальных полей, а затем
return Umar(firstname, ...)