Я изучаю ООП в Python, и у меня есть запрос, связанный с переменными класса и экземпляра.
>>> class Something:
... val = 10
... def __init__(self):
... self.instval = 100
...
>>> some = Something()
>>> some.val
10
>>> some.instval
100
>>> dir(some)
['__doc__', '__init__', '__module__', 'instval', 'val']
>>> some.val = 1000
>>> dir(some)
['__doc__', '__init__', '__module__', 'instval', 'val']
>>> some.val
1000
>>> Something.val
10
>>> del some.val
>>> some.val
10
>>> dir(some)
['__doc__', '__init__', '__module__', 'instval', 'val']
В этом классе у меня есть val
переменная класса и instval
переменная экземпляра. Я повторно объявляю переменную класса val
равной 1000. Таким образом, some.val
дает мне 1000, но Something.val
по-прежнему дает мне 10. Когда я удаляю some.val
, он возвращается к значению переменной класса.
Я знаю, что интерпретатор сначала ищет переменную на уровне экземпляра, а затем на уровне класса. Тогда что здесь происходит?
Я просмотрел некоторые ответы, я думаю, что это было наиболее подходящим, но я не полностью понял его последствия.
some.val = ...
создает атрибут экземпляра,del some.val
удаляет его. - person deceze♦   schedule 13.11.2017some.val
довольно четко устанавливает атрибут дляsome
, а не дляSomething
. - person deceze♦   schedule 13.11.2017