2013-03-13 17 views
8

Başlatma kodunu nasıl oluşturabilirim? __init__ sözleşmecisini koyduğumda, her zaman bana parametrelerin yanlış olduğunu söyleyin. Ayrıca lütfen __new__ ve super() kullanarak bir örnek verdik ve neden bunları kullanmalı veya kullanmamalıyız.Bir işleyicide __init__ nasıl yazılır (get ve post için)

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) 

app = webapp2.WSGIApplication ([('/', MainHandler)], debug = True)

+0

'__new__' ve' süper ne zaman kullanılacağı konusunda diğer sorular() 'Burada var ÇOK zaten, lütfen bunları arayın. –

+0

"def" ve "self" için özür dilerim ... kesilmiş/geçmiş bir şey ... zaten düzeltilmiş ... – ZEE

cevap

0

Klasının içindeki tüm fonksiyonlarda bir self değişken olması gerekir. Sınıfınızda çalışacak işleve bu değişkeni eklemeniz gerekir.

Sınıf içindeki her işlevde self değişkeninin gereksinimine ilişkin iyi bir açıklama here bulunabilir.

2

__init__ yönteminde kendi kodlarınızdan herhangi birini içeren bir argüman iletmiyorsanız, genellikle bir tane bile oluşturmaya gerek yoktur. webapp2.RequestHandler'un __init__ yöntemini kullanacaksınız. Eğer biri yapmak için ihtiyacını yapmak Eğer

, yine webapp2.RequestHandler.__init__ aramak zorunda:

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

     self.your_arg = your_arg 
+0

webapp2 kullanıyorum ve kod bu ----> sınıf theHandler (webapp2. RequestHandler): def __init __ (self): paylaşılan bazı sınıf (...) hata ----> TypeError olduğunu vars #def: __init __() alır tam olarak 1 argümanı (3 given) BİLGİ 2013 -03-13 23: 30: 43,937 dev_appserver.py:3104] "GET/rotx HTTP/1.1" 500 - – ZEE

+0

@ ZEE: Ne "bu"? – Blender

+0

Kafa karıştırıcı metin için üzgünüm ... hata: TypeError: __init __() tam olarak 1 argüman alır (3 verilen) INFO 2013-03-13 23: 30: 43,937 dev_appserver.py:3104] "GET/rotx HTTP /1.1 "500 - – ZEE

13

Nihayet anladım ... sorun "webapp2.RequestHandler" ağır basan özel özel işlem

gerektirmesi webapp2 manuel

: Eğer webapp2.RequestHandler geçersiz kılmak için

. init() yönteminde, yöntemin başlangıcında webapp2.RequestHandler.initialize() öğesini çağırmanız gerekir. Mevcut istek yanıtı ve appobjectsasattributesofthehandler değerini belirler. Örnek:

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 ... 
    # ... 
... ve hepsi bu ... şimdi beklendiği işleri olarak ;-)

+0

Muhtemelen apaçık, ama ben çift kontrol etmeliydim - 'self.initialize (request, response)' hiçbir ebeveyn işleyicisinin yapıcısını çağırmayacak, bu yüzden bunu açıkça yapman gerekecek .Anteneye (istek, cevap) giriş. Üst klasörü "super (subclassNameHere, self) .__ init __ (request, response)" ile çağırın. – Sam

İlgili konular