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 переназначается, но я не могу понять почему это происходит
Как написали в комментариях:
Потому что в методе
__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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP