我需要“方法二”在测试类中使用“方法一”的变量,但是我不知道该怎么做。
我尝试使用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
答案 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
,因为它在方法执行期间只是局部变量。