我有以下类和相应的方法。
#!/usr/bin/env python
class Foo:
def __init__(self, x):
self.x = x
def bar(self):
bar_out = self.x + 5
return bar_out
def qux(self):
qux_out = bar_out + 3
return qux_out
def main():
"""docstring for main"""
f = Foo(5)
main_bar_out = f.bar()
print main_bar_out
#main_qux_out = f.qux()
#print main_qux_out
if __name__ == '__main__':
main()
我想在这里做的是让方法a=qux
从bar
获取值,处理它并返回一个值。所以main_qux_out
的最终输出是13.我怎样才能正确地做到这一点?
请注意,我希望qux()
自动从bar()
获取值,而不传递任何参数。
更新
感谢@thefourtheye的回复。我还有其他问题。
如果我想让bar()
返回两个或多个值(这可以是字符串,字符串,列表或字典),请说明如何从qux()
调用它。我试过这个却失败了。
#!/usr/bin/env python
class Foo:
def __init__(self, x):
self.x = x
def bar(self):
self.bar1_out = self.x + 5
self.bar2_out = self.x + 1
return (self.bar1_out,self.bar2_out)
def qux(self):
self.qux_out1 = self.bar1_out() + 3
self.qux_out2 = self.bar2_out() + 6
return ( self.qux_out1, self.qux_out2)
def main():
"""docstring for main"""
f = Foo(5)
mbr_out1, mbr_out2 = f.bar()
print mbr_out1, "\t", mbr_out2
mqx_out1, mqx_out2 = f.qux()
print mqx_out1, "\t", mqx_out2
if __name__ == '__main__':
main()
这应该打印:
10 6
13 12
答案 0 :(得分:3)
您无法从另一个函数访问一个函数中定义的局部变量。但是你可以调用bar
函数并像这样使用返回值
def qux(self):
return self.bar() + 3
如果你想动态决定使用哪个值(bar
或作为参数传递的值),那么你可以做这样的事情
def qux(self, myvalue = None):
if myvalue is not None:
return myvalue + 3
else:
return self.bar() + 3
如果您未将任何值传递给qux
,则myvalue
将默认为None
作为其值。在函数内部,我们检查它是否不是None
,然后我们使用该值,否则我们调用self.bar()
并使用该值。
如果您打算从bar
返回两个值,那么您可以像这样解压缩它们
def qux(self, myvalue = None):
first, second = myvalue or self.bar()
return first + 3, second + 6
此处myvalue or self.bar()
确保self.bar()
myvalue
None
为myvalue
。
注意:如果您打算这样做,那么您还需要为self.qux((1, 2))
传递两个值,例如
{{1}}
答案 1 :(得分:1)
类内部的方法只能访问该类的变量或方法内定义的变量。你应该做的是使条形变量成为类的变量(而不是方法的一部分)
def bar(self):
self.bar_out = self.x + 5
return self.bar_out
或调用bar()并使用计算中的输出
def qux(self):
qux_out = self.bar() + 3