“<method>不接受参数(给定1)”,但我没有

2024-09-29 22:41:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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()一个参数,而我显然没有?我做错了什么?


Tags: inpy脚本hellobinmainusrdef
3条回答

如果您想将printHello作为实例方法,那么它应该始终接收self-as参数(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()

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

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

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

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

相关问题 更多 >

    热门问题