Раздвоение класса python3

Есть код

class A:
    def __init__(self, a):
        self.a = a

    def b(self, n):
        self -= A(n)
        print(self)

    def __sub__(self, other):
        return A(self.a - other.a)

    def __str__(self):
        return f'class A a={self.a}'


if __name__ == '__main__':
    a = A(100)
    a.b(10)
    print(a)

Вывод

class A a=90
class A a=100

Не могу понять почему метод b вычитает 10 из какого-то дубликата класса, а сам класс остается неизменным?

Pycharm предупреждает, что Method's parameter 'self' reassigned, то есть что self переназначается, но я не могу понять почему это происходит


Ответы (2 шт):

Автор решения: Victor VosMottor thanks Monica

Pycharm предупреждает, что Method's parameter 'self' reassigned, то есть что self переназначается, но я не могу понять почему это происходит

вы сами написали:

self -= A(n)

@nomnoms12:

Потому что в методе __sub__ Вы возвращаете новый класс, не изменяя текущий.

→ Ссылка
Автор решения: DD_N0p

Как написали в комментариях:

Потому что в методе __sub__ Вы возвращаете новый класс, не изменяя текущий. Вот пример изменения экземпляра класса:

class A:
    def __init__(self, a):
        self.a = a

    def b(self, n):
        self -= A(n)

    def __sub__(self, other):
        self.a -= other.a
        return self

    def __str__(self):
        return f'class A a={self.a}'


if __name__ == '__main__':
    a = A(100)
    a.b(10)
    print(a)
→ Ссылка