如何使方法从Python中的同一个类中获取另一个方法的值

时间:2014-03-31 03:27:46

标签: python class oop

我有以下类和相应的方法。

#!/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=quxbar获取值,处理它并返回一个值。所以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

2 个答案:

答案 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 Nonemyvalue

注意:如果您打算这样做,那么您还需要为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