在发布之前,我在这个网站上搜索了超过六个帖子(python变量类静态实例本地) https://stackoverflow.com/search?q=python+variables+class+static+instance+local
我为未来的学习添加了几个结果的书签,但是如果我的想法是对或错,他们似乎都没有向我澄清,所以我觉得我可能会遗漏一些基础知识(见下文)......
术语"类变量"和"静态变量"是指同一个东西吗?经过大约三次谷歌搜索,每次搜索我能理解的约6篇文章,我得出的结论是类和静态变量是一回事.但是,由于我只是学习Python和OOP的基础知识,这个结论可能是错误的,所以我想在我继续用错误的思维方式学习之前找到我的推理中的任何缺陷.在下面的代码中:
class Variables():
scVar = 3
def __init__(self, a, b):
self.iVar1 = a
self.iVar2 = b
def getLocalVar3(self):
localVar1 = 17
localVar2 = 100
localVar3 = localVar1 + localVar2
return localVar3
Run Code Online (Sandbox Code Playgroud)
'scVar'既是类变量又是静态变量('class'和'static'变量是同义词)?
第二个问题是澄清我对区分类变量,实例变量和局部变量的理解.在上面的代码中,我认为scVar是一个类变量; iVar1和iVar2是实例变量; 和localVar1,localVar2和localVar3是局部变量.这是正确的说法,还是有些东西我不见了?
谢谢cirosantilli,你链接的那篇文章是我还没见过的文章.我要去看看.我想知道Python的观点,即类变量和实例变量之间没有区别.这个观点是我应该尝试正确理解,作为一个初学者,或者我应该记住这个想法,而不是太担心将我当前的观点与那个调和,直到我变得更有经验?这个问题似乎过于含糊,取决于我目前对Python的理解程度.大多数情况下,我一直在运行类似于原始帖子中的类示例的命令; 在按下[enter]键之前预测输出,然后在不是我预测的情况下研究输出.从那开始,我开始掌握Python中的工作原理.基本上,我刚刚开始瞥见OO如何在Python中工作 - 缓慢但肯定地向前推进.
"但是上面只是惯例:从语言的角度来看,类变量和实例变量之间没有区别." - 只是为了帮助我更好地理解这一点,从语言的角度来看,这部分是什么......有点暗示Python文档在其中的某个地方解释了这个观点?如果是这样,我将重新阅读文档并专门查看这一部分,并尝试使我的思维过程符合它."......类变量和实例变量之间." 那么,即使'classobj'和'instance'可以看到和访问类和实例变量的方式不同,Python的观点是它们之间没有区别?在将来的阅读中我会记住这个想法,这样我就可以摆脱一些混乱.在原始帖子中运行*.py之后,我使用Python 2.7.x在IDLE中获得以下输出(仅包括跟踪错误的最后一行,以提高可读性):
>>> Variables.scVar
3
>>> Variables.iVar1
AttributeError: class Variables has no attribute 'iVar1'
>>> instance = Variables(5, 15)
>>> instance
<__main__.Variables instance at 0x02A0F4E0>
>>> Variables
<class __main__.Variables at 0x02A0D650>
>>> instance.scVar
3
>>> …Run Code Online (Sandbox Code Playgroud) from Tkinter import *
class Window(Tk):
def __init__(self, parent):
Tk.__init__(self, parent)
self.parent = parent
self.initialize()
def initialize(self):
self.geometry("600x400+30+30")
wButton = Button(self, text='text', command = self.OnButtonClick())
wButton.pack()
def OnButtonClick(self):
top = Toplevel()
top.title("title")
top.geometry("300x150+30+30")
topButton = Button(top, text="CLOSE", command = self.destroy)
topButton.pack()
if __name__ == "__main__":
window = Window(None)
window.title("title")
window.mainloop()
# top.lift(aboveThis=self)
#self.configure(state=DISABLED) - unknown option "-state"
#ss = self.state()
#self["state"] = "disabled" - unknown option "-state"
#ws = window.state() # >>> ws outputs: 'normal'
# varname.unbind("<Button-1>", OnButtonClick)
#self.unbind("<Button-1>", OnButtonClick) …Run Code Online (Sandbox Code Playgroud)