python-3.x TypeError:takes 0 positional arguments but 1 was given [duplicate]

sdnqo3pr  于 2023-05-02  发布在  Python
关注(0)|答案(3)|浏览(245)

此问题已在此处有答案

TypeError: worker() takes 0 positional arguments but 1 was given [duplicate](11个回答)
4年前关闭。
我刚开始学习Python。我创建了一个类,它有一个函数,在这个函数中我有一个字典。请注意,我正在检查字典中是否存在一个键,然后从函数返回一个值。
我试图访问该函数,但当我尝试这样做时,我得到以下错误:"TypeError: first_func() takes 0 positional arguments but 1 was given"
下面是我正在使用的代码:

class myFirst:
    def first_func():
        flag=0
        phonebook = {
            "A" : 938477566,
            "B" : 938377264,
            "C" : 947662781
        }
        # testing code
        if "A" in phonebook:
            flag=1
        if "D" not in phonebook:
            flag = 0
        return flag

myclassObj = myFirst()
status = myclassObj.first_func()

if status > 1:
    print ("Pass")
else:
    print ("fail")
vbopmzt1

vbopmzt11#

方法(属于类的函数或过程)需要一个self参数,你可能熟悉其他语言中的this,(除非显式定义为@staticmethod,但看起来不像是你在这里要做的)如下:

class myFirst:
    def first_func(self): # here
        flag=0
        phonebook = {
            "A" : 938477566,
            "B" : 938377264,
            "C" : 947662781
        }
        # testing code
        if "A" in phonebook:
            flag=1
        if "D" not in phonebook:
            flag = 0
        return flag

myclassObj = myFirst()
status = myclassObj.first_func()

if status > 1:
    print ("Pass")
else:
    print ("fail")

它应该可以在小改动下工作。
如果你想使用@staticmethod装饰器(如果函数实际上不需要来自类示例的信息),你可以这样做:

class myFirst:
    @staticmethod #here
    def first_func():

你可以在这里查看文档了解更多信息:https://docs.python.org/3/tutorial/classes.html

smtd7mpg

smtd7mpg2#

错误是你没有在函数签名中引用self。将签名更改为

def first_func(self):
    # rest of code
disbfnqx

disbfnqx3#

除了添加self参数之外,还可以考虑缩短代码。你的函数返回一个布尔值,你将它赋给status,然后你将status与int进行比较。相反,您可以执行以下操作来保存几行代码-

myClassObj = myFirst()
if myClassObj.first_func():
    print "Pass"
else
    print "Fail"

复杂性的增加是非常小的,但是当你可以使用你的函数返回的值时,没有理由把布尔值赋给另一个变量。

相关问题