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)
可以理解的是,最后一个命令引发了问题.
你需要在你的内部的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帖子,也将解释这一点: