2013-03-13 2 views
8

मैं प्रारंभिक कोड कैसे बना सकता हूं? जब मैं __init__ नियंत्रक डालता हूं तो हमेशा मुझे बताएं कि पैरामीटर गलत हैं। कृपया __new__ और super() का उपयोग करके एक उदाहरण भी दिया और हमें उनका उपयोग क्यों नहीं करना चाहिए या उनका उपयोग क्यों नहीं करना चाहिए।पायथन वेबपैप 2 में एक हैंडलर में एक __init__ कैसे डालें (पाने और पोस्ट के लिए)

import webapp2 

class MainHandler(webapp2.RequestHandler): 
    def __init__(self): 
     #initialization code/vars 
     x = 1 

    def get(self): 
     #code for get here 
     self.response.write(x+1) 

    def post(self): 
     #code for post here 
     self.response.write(x+2) 

एप्लिकेशन = webapp2.WSGIApplication ([('/', MainHandler)], डिबग = सच)

+0

वहाँ जब '__new__' और' सुपर उपयोग करने के लिए से संबंधित अन्य प्रश्नों() 'यहां पर हैं एसओ पहले से ही, उन लोगों के लिए खोज करें। –

+0

"def" और "self" के लिए खेद है ... एक कट/पिछली चीज़ थी ... पहले से ही सही ... – ZEE

उत्तर

0

आप अपने वर्ग के भीतर सभी कार्यों में एक self चर की आवश्यकता है। फ़ंक्शन के लिए आपको अपनी कक्षा में काम करने के लिए इस चर को शामिल करने की आवश्यकता है।

self की आवश्यकता के लिए एक अच्छी व्याख्या एक कक्षा के भीतर प्रत्येक समारोह में here पाया जा सकता है।

2

यदि आप __init__ विधि में कोई भी तर्क दर्ज नहीं कर रहे हैं या आपके किसी भी कोड को शामिल नहीं करते हैं, तो आमतौर पर एक बनाने की आवश्यकता नहीं होती है। आप बस webapp2.RequestHandler की __init__ विधि का उपयोग करेंगे।

आप एक बनाने के लिए जरूरत करना हैं, तो आप अभी भी webapp2.RequestHandler.__init__ कॉल करनी होगी:

class theHandler(webapp2.RequestHandler): 
    def __init__(self, your_arg, *args, **kwargs): 
     super(theHandler, self).__init__(*args, **kwargs) 

     self.your_arg = your_arg 
+0

मैं webapp2 का उपयोग कर रहा हूं और कोड यह है ----> कक्षा द हैंडलर (webapp2। RequestHandler): डीईएफ़ __init __ (स्वयं): #def कुछ वर्ग साझा वार्स (...) त्रुटि है ----> लेखन त्रुटि: __init __() लेता है वास्तव में 1 तर्क (3 दिए गए) जानकारी 2013 -03-13 23: 30: 43,937 dev_appserver.py:3104] "GET/rotx HTTP/1.1" 500 - – ZEE

+0

@ZEE: "यह" क्या है? – Blender

+0

भ्रमित पाठ के लिए खेद है ... त्रुटि है: टाइपरर: __init __() बिल्कुल 1 तर्क लेता है (3 दिया गया) जानकारी 2013-03-13 23: 30: 43,937 dev_appserver.py:3104] "GET/rotx HTTP/1.1 "500 - – ZEE

13

अंत में यह मिल गया ... समस्या यह है कि अधिभावी "webapp2.RequestHandler" विशेष विशेष हैंडलिंग

की आवश्यकता है

वेबपैप मैनुअल से:

यदि आप webapp2.RequestHandler को ओवरराइड करना चाहते हैं। init() विधि, आपको विधि की शुरुआत में webapp2.RequestHandler.in आरंभ करें() को कॉल करना होगा। यह वर्तमान अनुरोध, प्रतिक्रिया और appobjectsasattributesofthehandler सेट करेगा। उदाहरण:

class MyHandler(webapp2.RequestHandler): 
    def __init__(self, request, response): 
    # Set self.request, self.response and self.app. 
    self.initialize(request, response) 
    # ... add your custom initializations here ... 
    # ... 

... और है कि यह है ... अब उम्मीद काम करता है के रूप में ;-)

+0

यह शायद स्पष्ट है, लेकिन मुझे दोबारा जांचना पड़ा - 'self.initialize (अनुरोध, प्रतिक्रिया)' किसी भी अभिभावक हैंडलर के रचनाकारों को नहीं बुलाएगा, इसलिए आपको स्पष्ट रूप से ऐसा करने की आवश्यकता होगी (और स्वयं को स्थानांतरित करें माता-पिता में प्रारंभ करें (अनुरोध, प्रतिक्रिया)। माता-पिता को 'सुपर (subclassNameHere, self) के साथ कॉल करें .__ init __ (अनुरोध, प्रतिक्रिया) '। – Sam

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