self.attr = ..., Python создает (или обновляет) атрибут у конкретного экземпляра, на котором был вызван метод. Это происходит динамически — никаких предварительных объявлений атрибутов в Python не требуется. Экземпляр хранит свои собственные данные, и self всегда ссылается именно на него.Таким образом, присваивание через
self не влияет на атрибуты класса, если такие были, и не затрагивает другие экземпляры. Это ключевое отличие между атрибутами класса и экземпляра: одни общие для всех объектов, другие — индивидуальны.