TypeError : 采用 0 个位置参数,但给出了 1 个

新手上路,请多包涵

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

原文由 Developer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 961
2 个回答

方法(属于类的函数或过程)需要一个 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

原文由 vencaslac 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

def first_func(self):
    # rest of code

原文由 Mark Xavier 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题