предпочитает использовать self.__class__.variable
- если вы не хотите то же переменное для совместного использования всех подклассов.
В коде так:
class Ant:
count = 0
значение "счетчик" хранится в классе __dict__
атрибута. Если вы делаете что-то вроде:
class Ant:
count = 0
def __init__(self):
print(self.count)
Механизма доступа attrobute, определенного в модели данных в Python будет видеть не экземпляр count
в инстанции «Я», и получить значение из своего класса. Итак, если вы указали значение переменной класса, вы можете использовать его как обычный экземпляр.
Однако, если ваш код выглядит:
def __init__(self):
self.count += 1
Что происходит Ins целую разные вещи: Python Читает атрибут из класса, как указано выше, добавляет к нему 1, и сохраняет новый результат экземпляр.
Таким образом, всякий раз, когда вы хотите получить доступ к значению класса, вы можете жестко закодировать имя класса - (так как, когда код методы выполняется, класс уже создан и «известный»):
class Ant:
count = 0
def __init__(self):
Ant.count += 1
Или, еще лучше, используйте __class__
атрибут экземпляра - таким образом, вы всегда будете получить значение переменной для надлежащего подкласса
class Ant:
count = 0
def __init__(self):
self.__class__.count += 1
class FireAnt(Ant):
count = 0
(Обратите внимание, что, как и во втором примере выше, если подкласс не содержит собственный count
переменная, значение от суперкласс «count
будет прочитан, новый будет создан в подклассе при первом запуске этого кода)
' count' inside '__init__' - обычная локальная переменная. Вам нужен 'Ant.count' для доступа к переменной уровня * * –