Ответы пользователя по тегу ООП
  • Как можно изменить состояние переменной класса?

    @jottygroups
    Full-Stack Django Web Developer
    Ну и не должно было ничего сделаться.
    При запуске 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}")
    Ответ написан
    Комментировать