Как я могу заставить метод использовать переменные другого метода? - PullRequest
1 голос
/ 24 сентября 2019

Мне нужен «метод Два», использующий переменную «Метод Один» внутри тестового класса, однако я не знаю, как это сделать.

Я пытался использовать self.a_value, One.a_value и self.One.a_value, но ни одна из них не работает.

class test:

    def One(self):
        a_value=10
        return a_value

    def Two(self):
        b_value=self.One.a_value - 5
        return b_value

Ожидаемый вывод метода 2 будет 5, но вместо этого я получаю attributeError илиNameError

AttributeError: 'function' object has no attribute 'a_value'

NameError: name 'a_value' is not defined

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

В Python вы не можете получить доступ к локальным переменным функции или метода.Вы должны поместить a_value в качестве атрибута self вместо self.One.

В Two вы получите доступ к self.One.a_value, который будет обращаться к атрибуту a_value объекта-метода self.One.,Это происходит потому, что в Python все является объектом и имеет тип, который включает методы.

Таким образом, должно работать следующее:

class Test:
    def One(self):
‎        self.a_value = 10
‎        return a_value

    def Two(self):
‎        b_value = self.a_value - 5
    ‎    return b_value

В этом примере экземпляр Test получитатрибут a_value после того, как One был вызван в экземпляре.После вызова Two для экземпляра не будет никакого атрибута b_value, поскольку он является только локальной переменной во время выполнения метода.

0 голосов
/ 24 сентября 2019

Поскольку вы возвращаете значение из One, вы можете просто вызвать этот метод напрямую.Могут быть более элегантные подходы, но вы можете сделать что-то вроде следующего:

class test:
    # ...

    def Two(self):
        b_value = self.One() - 5
        return b_value

Если, с другой стороны, вы не возвращаете значение, вы можете присвоить его какself.a_value и убедитесь, что One выполняется до того, как это будет вызвано:

class test:

    def One(self):
        self.a_value = 10

    def Two(self):
        self.One()  # make sure One is called
        b_value = self.a_value - 5  # use self.a_value
        return b_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...