我有以下代码:
from tkinter import *
class Window(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title("COD:WWII Codes")
self.pack(fill=BOTH, expand=1)
codeButton = Button(
self,
text="Generate Code",
command=self.generatecode
)
codeButton.place(x=0, y=0)
def generatecode():
f = open("C:/Programs/codes.txt", "r")
t.insert(1.0. f.red())
root = Tk()
root.geometry("400x300")
app = Window(root)
root.mainloop()
然后,我收到以下错误:
TypeError:generatecode() 采用 0 个位置参数,但给出了 1 个
那么,我该如何解决这个错误呢?
当您调用类上的方法时(例如本例中的
generatecode()
),Python 会自动将 self
作为函数的第一个参数传递。所以当你打电话给self.my_func()
时,它更像是在打电话给MyClass.my_func(self)
。
因此,当 Python 告诉您“generatecode() 接受 0 个位置参数,但给出了 1 个”时,它是在告诉您,您的方法已设置为不接受任何参数,但在调用该方法时仍会传递
self
参数,所以事实上它正在接收一个参数。
将
self
添加到方法定义中应该可以解决问题。
def generatecode(self):
pass # Do stuff here
或者,您可以将该方法设置为静态,在这种情况下,Python 将不会将
self
作为第一个参数传递:
@staticmethod
def generatecode():
pass # Do stuff here
我遇到了同样的错误:
TypeError:test() 采用 0 个位置参数,但给出了 1 个
定义没有
self
的实例方法时,我调用它,如下所示:
class Person:
# ↓↓ Without "self"
def test():
print("Test")
obj = Person()
obj.test() # Here
因此,我将
self
放入实例方法中并调用它:
class Person:
# ↓↓ Put "self"
def test(self):
print("Test")
obj = Person()
obj.test() # Here
然后,错误就解决了:
Test
另外,即使用
self
定义实例方法,我们也不能直接通过类名调用它,如下所示:
class Person:
# Here
def test(self):
print("Test")
Person.test() # Cannot call it directly by class name
然后,出现以下错误:
TypeError:test() 缺少 1 个必需的位置参数:'self'
但是,如果定义实例方法时没有
self
,我们可以直接通过类名调用它,如下所示:
class Person:
# ↓↓ Without "self"
def test():
print("Test")
Person.test() # Can call it directly by class name
然后,我们可以得到如下结果,没有任何错误:
Test
详细地,我在我的答案中解释了什么是Python中的“实例方法”?,并解释了@staticmethod和@classmethod在我的答案中,@classmethod vs @staticmethod in Python。
以防万一有人在 jupyternotebook 中执行此操作。您必须重新启动 jupyternotebook 的内核才能在笔记本中更新更改