“<method> 不接受任何参数(给定 1 个)”但我没有给出

Posted

技术标签:

【中文标题】“<method> 不接受任何参数(给定 1 个)”但我没有给出【英文标题】:"<method> takes no arguments (1 given)" but I gave none 【发布时间】:2011-09-30 15:27:15 【问题描述】:

我是 Python 新手,我编写了这个简单的脚本:

#!/usr/bin/python3
import sys

class Hello:
    def printHello():
        print('Hello!')

def main():
    helloObject = Hello()
    helloObject.printHello()   # Here is the error

if __name__ == '__main__':
    main()

当我运行它 (./hello.py) 时,我收到以下错误消息:

Traceback (most recent call last):
  File "./hello.py", line 13, in <module>
    main()
  File "./hello.py", line 10, in main
    helloObject.printHello()
TypeError: printHello() takes no arguments (1 given)

为什么 Python 认为我给了 printHello() 一个参数,而我显然没有?我做错了什么?

【问题讨论】:

Python compiler error, x takes no arguments (1 given) 的可能重复项 【参考方案1】:

错误是指调用 helloObject.printHello() 之类的方法时隐式传递的隐式 self 参数。该参数需要显式包含在实例方法的定义中。它应该是这样的:

class Hello:
  def printHello(self):
      print('Hello!')

【讨论】:

【参考方案2】:

如果您希望printHello 作为实例方法,它应该始终接收 self 作为参数(ant python 将隐式传递)除非您希望 printHello 作为静态方法,否则您将不得不使用 @staticmethod

#!/usr/bin/python3
import sys

class Hello:
    def printHello(self):
        print('Hello!')

def main():
    helloObject = Hello()
    helloObject.printHello()   # Here is the error

if __name__ == '__main__':
    main()

作为'@staticmethod'

#!/usr/bin/python3
import sys

class Hello:
    @staticmethod
    def printHello():
        print('Hello!')

def main():
    Hello.printHello()   # Here is the error

if __name__ == '__main__':
    main()

【讨论】:

Class method != 静态方法。【参考方案3】:

在对象的实例上调用方法会将对象本身(通常是self)返回给对象。例如,调用Hello().printHello() 与调用Hello.printHello(Hello()) 相同,后者使用Hello 对象的实例作为第一个参数。

相反,将您的 printHello 语句定义为 def printHello(self):

【讨论】:

以上是关于“<method> 不接受任何参数(给定 1 个)”但我没有给出的主要内容,如果未能解决你的问题,请参考以下文章