Python: + = странное поведение в статическом методе - PullRequest
0 голосов
/ 08 октября 2018

Я столкнулся со странным поведением с + = при изучении статических методов.

Вот мой код:

class Box:

    totalMass = 0
    def __init__(self, mass):
        Box.totalMass += mass

    def getMassconsumption():
        return Box.totalMass

o1 = Box(2)
o2 = Box(10)
print(Box.getMassconsumption())

Как и ожидалось, он возвращает значение:

12

Однако, когда я изменяю строку 4 на:

Box.totalMass += 1

Возвращает значение:

2

Увеличивает добавленную стоимость до 2, 3, 4 и т. Д.. дает:

4
6
8

, кратный 2, независимо от ввода.Теперь я почти уверен, что не понимаю ни кода в моей тетради, ни того, как + = работает в этой ситуации.Может ли кто-нибудь объяснить, что здесь происходит?

1 Ответ

0 голосов
/ 08 октября 2018

Когда вы меняете код на

Box.totalMass += 1

каждый раз, когда инициализируете объект Box, вы добавляете +1 к значению Box.totalMass (а не используете значение ввода вообще).Так как вы инициализируете два поля, o1 и o2, вы добавляете +2 к начальному значению 0, что дает общее значение 2.

Когда у вас было

Box.totalMass += mass

, выдобавляли значение массы (определенное при инициализации объекта) к общей массе (которая начинается с 0).

...