Предположим, что я определяю следующий класс в Python.Странное поведение экземпляра класса - при обновлении внутренних переменных
class test():
def __init__(self):
self.x = 0
self.y = self.x ** 2
def check(self):
self.x = self.x + 1
print self.x
print self.y
Здесь у меня есть две внутренние переменные x и y. В инициализации я установил $$ y = x^2 $$. Теперь каждый раз, когда я вызываю метод check()
, он увеличивает значение x на 1: self.x = self.x + 1
. Однако, когда я печатаю значения х, правильно увеличивается на 1, но всегда остается 0. (Должно быть, это x^2 ??) Что происходит не так?
Ничего не происходит. Вы никогда не меняете 'self.y' после того, как вы инициализировали экземпляр, поэтому он сохраняет то же самое значение, которое у него всегда было. – kindall
Я очень рекомендую Ned Batchelder's [Факты и мифы о именах и знаках Python] (http://nedbatchelder.com/text/names1.html) »(26 минут [видео с PyCon US 2015] (https: // www. youtube.com/watch?v=_AEJHKGk9ns)) для краш-курса в том, как переменные Python и операторы присваивания совсем не похожи на большинство других языков. (В частности, имена всегда ссылаются на значения, _never_ на выражения или другие имена.) –