TransWikia.com

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

Stack Overflow на русском Asked on December 30, 2021

Есть код

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 Answers

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

Потому что в методе __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)

Answered by DD_N0p on December 30, 2021

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

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

self -= A(n)

@nomnoms12:

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

Answered by Victor VosMottor on December 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP