2011-07-07 13 views
24

मैं कर रहा हूँ नई दे दी है और मैं इस सरल स्क्रिप्ट में लिखा है: जब मैं यह (./hello.py) चलाने"<method> कोई तर्क (1 दिए गए) लेता है" लेकिन मैं पायथन के लिए कोई भी

#!/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() 

मैं निम्न त्रुटि संदेश मिलता है :

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) 

क्यों अजगर लगता है, जबकि मैं स्पष्ट रूप से नहीं किया था मैं printHello() एक तर्क दिया था? मैंने क्या गल्त किया है?

+1

के संभावित डुप्लिकेट (http://stackoverflow.com/questions/4445405/python-compiler-error [अजगर संकलक त्रुटि, एक्स कोई तर्क (1 दिए गए) लेता] -x-take-no-arguments-1-दिया गया) – IanAuld

उत्तर

39

त्रुटि जैसी विधि को कॉल करते समय अंतर्निहित self तर्क का जिक्र कर रही है। इस पैरामीटर को एक उदाहरण विधि की परिभाषा में स्पष्ट रूप से शामिल करने की आवश्यकता है। यह इस तरह दिखना चाहिए:

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

आप printHello चाहते हैं उदाहरण के तरीके के रूप में, यह हमेशा (चींटी अजगर परोक्ष पारित करेंगे) जब तक आप एक स्थिर पद्धति के रूप में 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() 
+1

[कक्षा विधि] (http://docs.python.org/library/functions.html#classmethod)! = स्थैतिक विधि। –

+0

क्षमा करें .. मेरा मतलब स्थिर था –

6

एक वस्तु रिटर्न के कहने पर एक विधि के रूप में कॉलिंग ऑब्जेक्ट में ऑब्जेक्ट (आमतौर पर self) ऑब्जेक्ट। उदाहरण के लिए, Hello().printHello() पर कॉल करना Hello.printHello(Hello()) पर कॉल करने जैसा ही है, जो Hello ऑब्जेक्ट का पहला तर्क के रूप में उपयोग करता है।

इसके बजाय, अपने printHello बयान को परिभाषित के रूप में def printHello(self):

संबंधित मुद्दे