Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python函数中的“self”旁边添加参数?_Python_Function_Arguments_Self - Fatal编程技术网

如何在python函数中的“self”旁边添加参数?

如何在python函数中的“self”旁边添加参数?,python,function,arguments,self,Python,Function,Arguments,Self,我正试图修改一个小程序,但看起来我有点不知所措。整个代码太长,无法复制到这里,所以我将粘贴有问题的部分 def kontroll(self): count=IntVar() sisend=sisendivaartus.get() print(count) if count==1: kast.delete(0.0,END) sisend.delete(0.0,END) count=0 else:

我正试图修改一个小程序,但看起来我有点不知所措。整个代码太长,无法复制到这里,所以我将粘贴有问题的部分

def kontroll(self):
    count=IntVar()
    sisend=sisendivaartus.get()
    print(count)
    if count==1:
        kast.delete(0.0,END)
        sisend.delete(0.0,END)
        count=0
    else:
        kast.delete(0.0,END)
        if sisend=="õige" or sisend=="ÕIGE" or sisend=="Õige":
            if oige==sonake:
                if tahendus==" ":
                    kast.insert(END,"Tubli, õige!"+"\n"+str(oige)+"\n"+str(tahendus))
                    count=1
                else:
                    kast.insert(END,"Tubli, õige!"+"\n"+str(oige)+"\n:"+str(tahendus))
                    count=1
                #skoor+=1
                #skoor=skoor+1
            else:
                if tahendus==" ":
                    kast.insert(END,"Kahjuks eksid. Õige on "+str(oige)+"\n"+str(tahendus))
                    count=1
                else:
                    kast.insert(END,"Kahjuks eksid. Õige on "+str(oige)+":\n"+str(tahendus))
                    count=1
                #vale=vale+1
                #skoor=skoor-1
        else:
            if sisend==oige:
                if tahendus==" ":
                    kast.insert(END,"Tubli, õige!\n"+str(oige)+"\n"+str(tahendus))
                    count=1
                else:
                    kast.insert(END,"Tubli, õige!\n"+str(oige)+":\n"+str(tahendus))
                    count=1
                #skoor=skoor+1
            else:
                if tahendus==" ":
                    kast.insert(END,"Kahjuks eksid. Õige on "+str(oige)+"\n"+str(tahendus))
                    count=1
                else:
                    kast.insert(END,"Kahjuks eksid. Õige on "+str(oige)+":\n"+str(tahendus))
                    count=1
                #vale=vale+1
                #skoor=skoor-1
        #if skoor<0:
         #   skoor=0
现在的问题是,我必须为kontroll添加参数,但我不知道如何在“self”存在的情况下做到这一点。老实说,我甚至不明白为什么我需要那个“自我”,因为我没有使用通常使用“自我”参数的类。。。所以不管怎样,我在谷歌上搜索了我收到的错误,没有“self”,在添加“self”后,它开始工作,但我不能在括号中添加“skoor”和“vale”。。。 现在我只是在括号中没有任何东西的情况下开始kontroll,比如:kontroll。 那么,我应该如何启动函数,如何向函数中添加参数呢?我也不能使用全局变量,因为这个'skoor=skoor+1'把一切都搞砸了。不能让全局变量在等号的左边

谢谢

编辑: 我的程序的GUI部分如下所示:

raam=Tk()
raam.title("MÄNG")
raam.geometry("430x450")
valik=IntVar()
valik2=IntVar()
C2=Checkbutton(raam,text="f",variable=valik2,command=lambda:ok.config(state=ACTIVE)).place(x=5,y=10)
ok=Button(raam,text="Alusta!",command=alusta,state=DISABLED)
ok.place(x=230,y=20,width=80)
C1=Checkbutton(raam,text="š",variable=valik,command=lambda:ok.config(state=ACTIVE)).place(x=5,y=30)
sisendivaartus=StringVar()
sisend=Entry(raam,textvariable=sisendivaartus)
sisend.place(x=10,y=250,width=200)
sisend.bind("<Return>",kontroll(skoor,vale))
credit=Label(raam,text="2013",font=("Verdana","7"))
credit.place(x=0,y=430)
score=Label(raam,text="Skoor:",font=("Verdana","7"))
score.place(x=380,y=430)
nupp=Button(raam,text="Seaded",command=seaded)
nupp.config()
nupp.place(x=330,y=20,width=80)
kast=Text(raam,wrap=WORD,font=("Verdana",10))
kast.config()
app=App(raam)
kast.place(x=10,y=60,width=400,height=180)
raam.mainloop()
def kontroll(skoor, vale):
    pass # Your code goes here.

kontroll(skoor, vale)
对于Henry关于如何在不在类中时使用函数的建议,我开始得到一些没有依据的错误,例如NameError:global name'oige'没有定义。不管错误是怎么说的,全局名称“oige”是定义的,没有参数也可以正常工作。如果我将函数定义中的'skoor'和'vale'替换为'self'并在没有任何参数的情况下调用它,那么一切都会正常工作。我想如果没有看到整篇文章,这很难理解,所以我上传了它,如果有人有时间的话。 注:我之前说过,我的代码中有0个类——自从我一直在做这件事以来,这已经改变了。另外,请记住,这是一个测试版的测试版,所以很多东西还不应该工作。 对于琐事:它测试和训练人们在爱沙尼亚拼字法方面的能力

编写你的函数 向函数添加更多参数非常容易;只需将函数定义更改为

def kontroll(self, skoor, vale):
    # Your code here.
然后skoor和vale成为kontroll函数的局部变量名,您可以像使用任何其他变量一样使用它们

至于为什么在函数定义中需要self,这可能是因为该方法实际上是您定义的某个类的实例方法。实例方法总是将绑定到的对象作为第一个参数接收。这个参数称为self,这就是为什么必须为它保留一个参数。有关更完整的解释,请参阅

如果这实际上不是某个类的实例方法,请注意,那么实际上不需要self。一般来说,如果该方法不需要对特定对象实例的引用,那么就没有理由将其作为实例方法

调用你的函数 调用函数同样简单,但这取决于另一个问题的答案:这实际上是一个实例方法吗?如果它是在一个听起来像是的类中定义的,那么您需要执行以下操作:

class C(object):
    def kontroll(self, skoor, vale):
        pass # Your code goes here.

c = C() # Create an instance of the class!
c.kontroll(skoor, vale) # The instance (c) is automatically passed to the method.
另一方面,如果函数未在类中定义,则代码应如下所示:

raam=Tk()
raam.title("MÄNG")
raam.geometry("430x450")
valik=IntVar()
valik2=IntVar()
C2=Checkbutton(raam,text="f",variable=valik2,command=lambda:ok.config(state=ACTIVE)).place(x=5,y=10)
ok=Button(raam,text="Alusta!",command=alusta,state=DISABLED)
ok.place(x=230,y=20,width=80)
C1=Checkbutton(raam,text="š",variable=valik,command=lambda:ok.config(state=ACTIVE)).place(x=5,y=30)
sisendivaartus=StringVar()
sisend=Entry(raam,textvariable=sisendivaartus)
sisend.place(x=10,y=250,width=200)
sisend.bind("<Return>",kontroll(skoor,vale))
credit=Label(raam,text="2013",font=("Verdana","7"))
credit.place(x=0,y=430)
score=Label(raam,text="Skoor:",font=("Verdana","7"))
score.place(x=380,y=430)
nupp=Button(raam,text="Seaded",command=seaded)
nupp.config()
nupp.place(x=330,y=20,width=80)
kast=Text(raam,wrap=WORD,font=("Verdana",10))
kast.config()
app=App(raam)
kast.place(x=10,y=60,width=400,height=180)
raam.mainloop()
def kontroll(skoor, vale):
    pass # Your code goes here.

kontroll(skoor, vale)
编写函数 向函数添加更多参数非常容易;只需将函数定义更改为

def kontroll(self, skoor, vale):
    # Your code here.
然后skoor和vale成为kontroll函数的局部变量名,您可以像使用任何其他变量一样使用它们

至于为什么在函数定义中需要self,这可能是因为该方法实际上是您定义的某个类的实例方法。实例方法总是将绑定到的对象作为第一个参数接收。这个参数称为self,这就是为什么必须为它保留一个参数。有关更完整的解释,请参阅

如果这实际上不是某个类的实例方法,请注意,那么实际上不需要self。一般来说,如果该方法不需要对特定对象实例的引用,那么就没有理由将其作为实例方法

调用你的函数 调用函数同样简单,但这取决于另一个问题的答案:这实际上是一个实例方法吗?如果它是在一个听起来像是的类中定义的,那么您需要执行以下操作:

class C(object):
    def kontroll(self, skoor, vale):
        pass # Your code goes here.

c = C() # Create an instance of the class!
c.kontroll(skoor, vale) # The instance (c) is automatically passed to the method.
另一方面,如果函数未在类中定义,则代码应如下所示:

raam=Tk()
raam.title("MÄNG")
raam.geometry("430x450")
valik=IntVar()
valik2=IntVar()
C2=Checkbutton(raam,text="f",variable=valik2,command=lambda:ok.config(state=ACTIVE)).place(x=5,y=10)
ok=Button(raam,text="Alusta!",command=alusta,state=DISABLED)
ok.place(x=230,y=20,width=80)
C1=Checkbutton(raam,text="š",variable=valik,command=lambda:ok.config(state=ACTIVE)).place(x=5,y=30)
sisendivaartus=StringVar()
sisend=Entry(raam,textvariable=sisendivaartus)
sisend.place(x=10,y=250,width=200)
sisend.bind("<Return>",kontroll(skoor,vale))
credit=Label(raam,text="2013",font=("Verdana","7"))
credit.place(x=0,y=430)
score=Label(raam,text="Skoor:",font=("Verdana","7"))
score.place(x=380,y=430)
nupp=Button(raam,text="Seaded",command=seaded)
nupp.config()
nupp.place(x=330,y=20,width=80)
kast=Text(raam,wrap=WORD,font=("Verdana",10))
kast.config()
app=App(raam)
kast.place(x=10,y=60,width=400,height=180)
raam.mainloop()
def kontroll(skoor, vale):
    pass # Your code goes here.

kontroll(skoor, vale)
您需要self,因为这几乎肯定是一个类的方法,并且您需要在调用该对象时将其传递给该方法。Self只是一个惯例,从技术上讲,你可以用其他的名字来称呼它。话虽如此,您似乎需要阅读一些python中的类,并真正尝试理解对象实例的工作方式。我建议从文档开始:

代码片段中似乎有很多全局变量可能是类变量,在深入研究这些变量之前,您确实需要了解uu init_uu方法是如何工作的 s、 您需要self,因为这几乎肯定是一个类的方法,并且在调用对象时需要将其传递给该方法。Self只是一个惯例,从技术上讲,你可以用其他的名字来称呼它。话虽如此,您似乎需要阅读一些python中的类,并真正尝试理解对象实例的工作方式。我建议从文档开始:


代码片段中似乎有很多全局变量可能是类变量,在深入讨论之前,您确实需要了解uu init_uu方法是如何工作的。

请检查缩进。Python是对空格敏感的。如果这不是一个实例方法,您绝对不需要self。当您收到错误消息时,您是如何调用函数的?您的代码几乎无法读取;你应该看看。我一眼就发现了各种各样的问题。您不应该将skoor和vale声明为global。调用kontroll的具体问题是,您实际上希望将它绑定到tkinter条目,但您自己却在调用它。你想要像sisend.bind这样的东西,而不是kontroll,但我没有弄乱过tkinter,我帮不了你更多。不管怎样,将函数绑定到tkinter对象都属于一个单独的问题。是的,我相信它可能适用于一个没有使用过它并且不知道爱沙尼亚语的人。。。对不起在继续我的项目之前,我将深入研究该参考资料。感谢您的帮助和检测问题部件。我还不知道该怎么办,但我会想出办法的正如你们肯定已经收集到的,我还远远不是一个真正的程序员,这实际上是一个高中项目。我感谢你们的帮助,希望有一天我和这个程序都能以更令人满意的速度运行@user2241069记录在案,这不是真正的语言问题。行与行之间或语法元素之间没有任何空格,这使得一切看起来都非常混乱。即使只是在你的=符号周围加上空格也会有很大的不同。请检查你的缩进。Python是对空格敏感的。如果这不是一个实例方法,您绝对不需要self。当您收到错误消息时,您是如何调用函数的?您的代码几乎无法读取;你应该看看。我一眼就发现了各种各样的问题。您不应该将skoor和vale声明为global。调用kontroll的具体问题是,您实际上希望将它绑定到tkinter条目,但您自己却在调用它。你想要像sisend.bind这样的东西,而不是kontroll,但我没有弄乱过tkinter,我帮不了你更多。不管怎样,将函数绑定到tkinter对象都属于一个单独的问题。是的,我相信它可能适用于一个没有使用过它并且不知道爱沙尼亚语的人。。。对不起在继续我的项目之前,我将深入研究该参考资料。感谢您的帮助和检测问题部件。我还不知道该怎么办,但我会想出办法的正如你们肯定已经收集到的,我还远远不是一个真正的程序员,这实际上是一个高中项目。我感谢你们的帮助,希望有一天我和这个程序都能以更令人满意的速度运行@user2241069记录在案,这不是真正的语言问题。行与行之间或语法元素之间没有任何空格,这使得一切看起来都非常混乱。即使只是在你的=符号周围加上空格也会有很大的不同。谢谢你的回答,但是我怎么称呼kontroll呢?无论是康特罗尔塞尔夫、斯库尔、维尔还是康特罗尔斯库尔、维尔都不行。两个实例均出现错误:TypeError:kontroll缺少2个必需的位置参数:“skoor”和“vale”@user2241069您需要告诉我们函数的位置。我编辑了我的答案;查看下半部分,了解如何调用函数,具体取决于代码的设置方式,并阅读我发布到Python的“self”解释!我没有故意将函数放在类中——我的意思是,我的整个代码中有0个类,因此我假设它位于类之外。如果有另一种更有利可图的方式让事情在课堂上结束,请解释。简而言之,函数不在类中。我读了关于“自我”的链接,谢谢。我以前已经读过它,我想我可能理解它在类中的用途,当我有init present之类的东西时,但我的代码应该更简单,不需要它。这就是我问的原因。它不适用于您的提议。@user2241069它不适用于任何人,不会提供足够的信息来帮助您。如果你的函数不是在类中定义的,你是否定义了它,并按照我的回答的方式调用它?你犯了什么错误?你的代码看起来像什么?我帮不上忙
除非你告诉我这些事情。我补充了我原来的问题,希望能对这件事有所帮助。你回答了我愚蠢的问题,我感激不尽!谢谢你的回答,那我怎么称呼kontroll呢?无论是康特罗尔塞尔夫、斯库尔、维尔还是康特罗尔斯库尔、维尔都不行。两个实例均出现错误:TypeError:kontroll缺少2个必需的位置参数:“skoor”和“vale”@user2241069您需要告诉我们函数的位置。我编辑了我的答案;查看下半部分,了解如何调用函数,具体取决于代码的设置方式,并阅读我发布到Python的“self”解释!我没有故意将函数放在类中——我的意思是,我的整个代码中有0个类,因此我假设它位于类之外。如果有另一种更有利可图的方式让事情在课堂上结束,请解释。简而言之,函数不在类中。我读了关于“自我”的链接,谢谢。我以前已经读过它,我想我可能理解它在类中的用途,当我有init present之类的东西时,但我的代码应该更简单,不需要它。这就是我问的原因。它不适用于您的提议。@user2241069它不适用于任何人,不会提供足够的信息来帮助您。如果你的函数不是在类中定义的,你是否定义了它,并按照我的回答的方式调用它?你犯了什么错误?你的代码看起来像什么?除非你告诉我这些事情,否则我不可能帮上忙。我补充了我原来的问题,希望这能对这件事有所帮助。你回答了我愚蠢的问题,我感激不尽!