Ну и не должно было ничего сделаться.
При запуске child.py ты создаёшь экземпляр класса Test, у тебя инициализировался словарь data... Всё.
Я знаю, что ты хотел, чтобы выполнилось то, что ниже:
if __name__ == "__main__":
new.fill_data()
time.sleep(5)
print(new.data)
Но оно так не работает. Проверка ложна. Это сработает, если ты запустишь напрямую parent.py:
python parent.py
Да и тем более ты всего лишь импортишь переменную экземпляр класса Test. Даже, если бы там был цикл while True, он бы не выполнился.
Ты пытался из child.py обратиться к new.data['name'] через setattr, но ты это сделал неверно. Ты обратился к new.name, вот и ошибка. Чтобы сделать всё правильно через setattr, надо было прописать:
setattr(new, data["name"], 'Nick')
Ответ, как правильно сделать, файл child.py
from parent import new
if __name__ == "__main__":
new.fill_data()
print(f"[child]: Before change data is {new.data}") # тут выведется правильная data
new.change_data('Nick')
print(f"[child]: After change data is {new.data}")