2010-06-27 2 views
2

WSGIApplication의 생성자에는 debug 인수가 필요합니다. webapp.RequestHandler에서 상속 한 처리기 클래스에서이 값 집합에 액세스하는 방법이 있습니까?Google App Engine/WSGIApplication : 디버그 확인 방법

def main(): 
    application = webapp.WSGIApplication([('/', fooHandler) 
              ], 
             debug=True) 
    util.run_wsgi_app(application) 

답변

1

WSGIApplication 인스턴스는 self.__debugdebug 매개 변수의 값을 기록합니다 이중 밑줄이 내부 응용 프로그램을 간주로 클래스 외부, 코드 자체가,이 속성을보고 생각하지하는 강력한 표시입니다 API의 사소한 수정에서도 "언제든지"변경할 수 있습니다. 이 매우 강한 표시를 무시하고 싶다면 일 수 있으며 기술적으로는 webapp.WSGIApplication.active_instance._WSGIApplication__debug을 사용하십시오.하지만 실제로는 좋지 않습니다. webapp.WSGIApplication.active_instance.debugmode되고,

class MyWSGIapp(webapp.WSGIApplication): 
    def __init__(self, url_mapping, debug=False): 
     self.debugmode = debug 
     webapp.WSGIApplication.__init__(self, url_mapping, debug) 

를 이제, 당신이 일을 시작하는 대신 webapp.WSGIApplicationMyWSGIapp를 사용하는 경우 :

훨씬 더 나은 아이디어는 속성이 공개적으로 볼 수 있도록하기 위해 자신의 코드에 WSGIApplication을 하위 클래스입니다 clean, 고체 응용 프로그램의 다른 곳에서 관심있는 속성에 액세스하는 방법.

+0

그래서 서브 클래 싱을 통해 캡슐화를 깨뜨리고 있습니다 ... 처음부터 직접 값을 읽는 것만 큼 위험하지 않습니까? –

+1

이 제안은 캡슐화를 깨뜨리지 않으며 위험하지 않습니다. (당신이'WSGIApplication'의'__debug' 필드에 직접 접근하려는 것과는 달리) 여러분이 코드를 제어하기 때문에 거기에있는'debugmode'에 의존 할 수 있습니다. –

+0

@Rosarch, 혼란 스럽네요 .- 어디에서 읽었습니까? 그렇지 않으면, 서브 클래 싱이 캡슐화를 깨뜨린 것을 "배웠"습니까? 하위 클래스 화는 OOP에서 기본적인 것입니다. 그리고 제가 제안한 서브 클래스는 기본 클래스의 _any_ 속성을 살펴 보지 않습니다. 즉석에서 '__init__'인수의 복사본을 "캡처"합니다. ** be ** at ** ** "encapsulation-breaking"? 당신의 걱정을 분명히하십시오. –