问题
I am new to Python and I have written this simple script:
#!/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()
When I run it (./hello.py
) I get the following error message:
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)
Why does Python think I gave printHello()
an argument while I clearly did not? What have I done wrong?
回答1:
The error is referring to the implicit self
argument that is passed implicitly when calling a method like helloObject.printHello()
. This parameter needs to be included explicitly in the definition of an instance method. It should look like this:
class Hello:
def printHello(self):
print('Hello!')
回答2:
If you want printHello
as instance method, it should receive self as argument always(ant python will pass implicitly) Unless you want printHello
as a static method, then you'll have to use @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()
As '@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()
回答3:
Calling a method on the instance of an object returns the object itself (usually self
) to the object. For example, calling Hello().printHello()
is the same as calling Hello.printHello(Hello())
, which uses an instance of a Hello
object as the first argument.
Instead, define your printHello
statement as def printHello(self):
来源:https://stackoverflow.com/questions/6614123/method-takes-no-arguments-1-given-but-i-gave-none