#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. Прочитайте значение в родительском классе и создайте новое в дочернем…