我有下面的类和相应的方法。
#!/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()获取值,而不传递任何参数。
更新
谢谢你的回答。我还有其他问题要问。
假设我想让bar()返回两个或多个值(这可以是字符串、字符串、列表或dict),我如何从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发布于 2014-03-31 03:29:48
您不能从另一个函数访问在一个函数中定义的局部变量。但是您可以调用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()确保如果myvalue是None,我们就使用None。
注意:,如果您打算这样做,那么您也需要为myvalue传递两个值,如下所示
self.qux((1, 2))发布于 2014-03-31 03:54:49
类中的方法只能访问该类的变量或方法中定义的变量。您应该做的是让bar成为类的一个变量(而不是方法的一部分)。
def bar(self):
self.bar_out = self.x + 5
return self.bar_out或调用bar()并在计算中使用输出
def qux(self):
qux_out = self.bar() + 3https://stackoverflow.com/questions/22753178
复制相似问题