首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使方法从Python中的同一类中获取另一个方法的值

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

Stack Overflow用户
提问于 2014-03-31 03:27:45
回答 2查看 58关注 0票数 1

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

代码语言:javascript
复制
#!/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()获取值,而不传递任何参数。

更新

谢谢你的回答。我还有其他问题要问。

假设我想让bar()返回两个或多个值(这可以是字符串、字符串、列表或dict),我如何从qux()调用它。我试过但失败了。

代码语言:javascript
复制
#!/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()

这应该打印:

代码语言:javascript
复制
10  6
13  12
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-31 03:29:48

您不能从另一个函数访问在一个函数中定义的局部变量。但是您可以调用bar函数并使用如下返回值

代码语言:javascript
复制
def qux(self):
    return self.bar() + 3

如果您想动态地决定使用哪个值(bar或作为参数传递的值),那么您可以这样做

代码语言:javascript
复制
def qux(self, myvalue = None):
    if myvalue is not None:
        return myvalue + 3
    else:
        return self.bar() + 3

如果不将任何值传递给quxmyvalue将默认使用None作为其值。在函数内部,我们检查它是否不是None,然后使用它的值,否则我们调用self.bar()并使用该值。

如果计划从bar返回两个值,则可以按以下方式解压它们

代码语言:javascript
复制
def qux(self, myvalue = None):
    first, second = myvalue or self.bar()
    return first + 3, second + 6

在这里,myvalue or self.bar()确保如果myvalueNone,我们就使用None

注意:,如果您打算这样做,那么您也需要为myvalue传递两个值,如下所示

代码语言:javascript
复制
self.qux((1, 2))
票数 3
EN

Stack Overflow用户

发布于 2014-03-31 03:54:49

类中的方法只能访问该类的变量或方法中定义的变量。您应该做的是让bar成为类的一个变量(而不是方法的一部分)。

代码语言:javascript
复制
def bar(self):
    self.bar_out = self.x + 5
    return self.bar_out

或调用bar()并在计算中使用输出

代码语言:javascript
复制
def qux(self):    
    qux_out = self.bar() + 3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22753178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档