如何使一个方法使用其他方法的变量?

时间:2019-09-24 18:25:52

标签: python-3.x methods

我需要“方法二”在测试类中使用“方法一”的变量,但是我不知道该怎么做。

我尝试使用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 :(得分:0)

由于您从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

答案 1 :(得分:0)

在Python中,您无法访问函数或方法的局部变量。您必须将a_value设置为self的属性,而不是self.One

一分为二,您访问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的实例在实例上被调用One后将获得属性a_value。在实例上调用Two之后,将没有属性b_value,因为它在方法执行期间只是局部变量。

相关问题