как получить доступ к унаследованной переменной класса в python

#python #class #variables

#python #класс #переменные

Вопрос:

Я новичок в Python и пытаюсь разобраться в небольших фрагментах кода, особенно в перегрузке конструктора и переменной класса. Я написал это для тестирования:

 class parent:
    # class variable
    numberOfInstance = 0
    def __init__(self, arg1):
        # an instance variable
        self._instVar1 = arg1
        parent.numberOfInstance  = 1
        # self.__class__.numberOfInstance  = 1

class child(parent):
    def __init__(self, arg1, arg2):
        # an instance variable for child
        self._instVar2 = arg2
        super().__init__(arg1)

p1 = parent('an arg')
p2 = parent('an arg')
p3 = child('an arg','another' )
print (p2.numberOfInstance)
print (p3.numberOfInstance)
print (child.numberOfInstance)
print (parent.numberOfInstance)
  

Результат такой, как я ожидал: 3,3,3,3, но когда я комментирую строку
parent.numberOfInstance = 1 и раскомментировать строку
self.__class__.numberOfInstance = 1 изменение способа доступа к
переменная класса, результат :

 2
3
3
2

Process finished with exit code 0
  

для меня это кажется очень странным, потому что переменная класса, похоже, дублируется и обновляется в «one
способ»режим. Я понимаю, что во второй версии класс является дочерним, но переменная, на которую ссылается, является родительской переменной, потому что приращение работает хорошо.

Комментарии:

1. В первый раз, когда вы делали это self.__class__.numberOfInstance = 1 из экземпляра child , вы считывали текущее значение из parent , увеличивали его и записывали новую переменную класса в child . С этого момента оба класса имеют свои собственные независимые версии этой переменной класса.

2. Спасибо. Вы правы. для меня это очень странное поведение, пришедшее из мира Java. Прочитайте значение в родительском классе и создайте новое в дочернем…