Почему моя переменная класса _x не увеличивается? - PullRequest
0 голосов
/ 30 ноября 2019

Я хочу описать экземпляры классов, в которых хранится количество экземпляров этого класса. Вот код:

class WeAre:
    _x = 0

    def __init__(self):
        self._x += 1

    @property
    def count(self):
        return self._x

    @count.setter
    def count(self, val):
        return None

    @count.deleter
    def count(self):
        return None

    def __del__(self):
        self._x -= 1    

a = WeAre()
print(a.count)
b, c = WeAre(), WeAre(),
a.count = 100500
print(a.count, b.count, c.count)
del b.count
del b
print(a.count)

Вот мой вывод:

1
1 1 1
1

И я не могу понять, почему переменная класса _x не увеличивается / не уменьшается

1 Ответ

3 голосов
/ 30 ноября 2019

В конструкторе вы создаете переменную экземпляра, которая затмевает переменную класса. Поэтому вы всегда работаете с переменной экземпляра объекта.

class WeAre:
    _x = 0  # <-- class variable
                         #       creates     uses
                         #      object var  class var
                         #
                         #          |         |
    def __init__(self):  #          V         V          
        self._x += 1     # same as self._x = self._x + 1

Это сработает:

class WeAre:
    _x = 0

    def __init__(self):
        WeAre._x += 1

Но вам может понадобиться переосмыслить это, если вам потребуется переопределить WeAreкласс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...