【问题标题】:TypeError : takes 0 positional arguments but 1 was given [duplicate]TypeError:接受 0 个位置参数,但给出了 1 个 [重复]
【发布时间】:2019-04-15 14:50:42
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

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

    【讨论】:

    • 感谢您对此的解释
    【解决方案2】:

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

    def first_func(self):
        # rest of code
    

    【讨论】:

      【解决方案3】:

      除了添加 self 参数之外,您还可以考虑缩短代码。您的函数返回一个您分配给 status 的布尔值,然后您将状态与一个 int 进行比较。相反,你可以做这样的事情来节省几行-

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

      复杂性增益非常小,但是当您可以使用函数返回的值时,没有理由将布尔值分配给另一个变量。

      【讨论】:

        猜你喜欢
        • 2020-06-13
        • 2013-09-23
        • 2017-10-05
        • 2016-01-30
        • 2019-06-26
        • 2014-11-12
        • 1970-01-01
        • 2019-08-19
        相关资源
        最近更新 更多