Это вызвано искажением имени , выполненным Python, когда любая переменная уровня класса начинается как минимум с двух подчеркиваний и имеет не более одного подчеркивания в конце.
Например:
class Foo:
__bar = 10
Теперь к Foo.__bar
можно обращаться за пределами Foo
класса как Foo._Foo__bar
.
В вашем случае было бы лучше просто использовать одинподчеркивание, то есть _count
в качестве имени переменной, которое указывает пользователям, что имя предназначено для использования только в личных целях.
Если вы хотите следовать коварному маршруту и сохранить свою текущую структуру, вы можете определитьgetCount
метод суперкласса для возврата значений, основанный на классе, из которого он вызван:
In [1720]: class Animal:
...: __count=0
...: def __init__(self):
...: Animal.__count += 1
...: @classmethod
...: def getCount(cls):
...: return cls.__count if cls.__name__ == 'Animal' else getattr(cls, f'_{cls.__name__}__count')
Кроме того, вы можете использовать snake_case для имен методов, например get_count
и 4 пробела для отступа.