在类中,变量来自一秒中使用的一种方法?

dfl*_*lyn 3 python methods class python-3.x

这是我遇到的问题的简化示例.我想在func2中调用var1,这可能吗?

class Plot():
    def __init__(self,variable):
        self._variable = float(variable)

    def func1(self):
        var1 = self._variable + 1
        print(var1)

    def func2(self):

        var2 = var1 + 1
        print(var2)
Run Code Online (Sandbox Code Playgroud)

我测试过的示例命令

h = Plot(3)

h.func1()
h.func2()
Run Code Online (Sandbox Code Playgroud)

可以理解的是,最后一个命令引发了问题.

idj*_*jaw 6

你需要在你的内部的var1前面指定一个'self' func1.

所以,这样做:

def func1(self):
    self.var1 = self._variable + 1
    print(var1)
Run Code Online (Sandbox Code Playgroud)

那样在func2中,你就是这样做的:

def func2(self):

    var2 = self.var1 + 1
    print(var2)
Run Code Online (Sandbox Code Playgroud)

解释为什么需要这样做.

**编辑:感谢@Pynchia的评论

让我们看一下您的代码,以进一步解释为什么需要这样做:

class Plot():
    def __init__(self,variable):
        self._variable = float(variable)

    def func1(self):
        self.var1 = self._variable + 1
        print(var1)

    def func2(self):
        var2 = self.var1 + 1
        print(var2)
Run Code Online (Sandbox Code Playgroud)

简而言之,因为它是一个非常详细的主题,self的使用允许您在实例命名空间中使用变量,简而言之,它们可以在您的方法中使用,就像我提出的解决方案一样.

因此,当您最终创建类的实例时:

obj = Plot()
Run Code Online (Sandbox Code Playgroud)

obj现在位于实例(对象)空间/范围中,并且可以使用"stuff"的方法obj是使用self来处理上述示例中的所有内容.

要真正了解正在发生的事情,需要更长的解释,我认为以下链接确实对描述公正,我强烈建议阅读它:

http://www.toptal.com/python/python-class-attributes-an-overly-thorough-guide

这是另一个SO帖子,也将解释这一点:

自我的目的是什么?