TypeError:接受0个位置参数,但给出了1个

时间:2018-11-12 20:34:34

标签: python python-3.x

我已经开始学习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")

3 个答案:

答案 0 :(得分:3)

方法(属于类的函数或过程)需要一个self自变量(您可能熟悉其他语言的this),例如:

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")

应该可以进行较小的更改

答案 1 :(得分:0)

错误是您未在函数签名中引用self。将签名更改为

def first_func(self):
    # rest of code

答案 2 :(得分:-1)

除了添加self参数之外,您还可以考虑缩短代码。您的函数返回一个布尔值,该值分配给status,然后将状态与int进行比较。相反,您可以执行类似的操作以节省几行-

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

复杂度增加非常小,但是当您只需要使用函数返回的值时,就没有理由将布尔值分配给另一个变量。