Как и когда оцениваются python @properties - PullRequest
0 голосов
/ 13 сентября 2018

Вот фрагмент кода.

class TestClass:
    def __init__(self):
        self.a = "a"
        print("calling init")

    @property
    def b(self):
        b = "b"
        print("in property")
        return b

test_obj = TestClass()
print("a = {} b = {}".format(test_obj.a,test_obj.b))

Я пытаюсь понять , когда переменная b , определенная внутри test_obj, получает значение "b".

Как видно из приведенного ниже снимка экрана, оператор в строке 13 еще предстоит оценить / выполнить, но значение b для test_obj уже инициализировано.Отладка этого путем размещения точки останова буквально на каждой строке не помогла мне понять, как это происходит.

enter image description here Может кто-нибудь объяснить мне это?

1 Ответ

0 голосов
/ 13 сентября 2018

Скорее всего, IDE пытается показать, каково значение test_obj.b.Для этого он получает значение от test_obj.b.Поскольку не имеет значения, является ли b атрибутом или @property, отладчик, по сути, просто делает для вас test_obj.b, что дает ему значение 'b'.

.функция def b работает точно так же, как вы можете ожидать от любой другой обычной функции;просто отладчик / IDE неявно вызывает его для вас.

...