WSGIApplication 인스턴스는 self.__debug
로 debug
매개 변수의 값을 기록합니다 이중 밑줄이 내부 응용 프로그램을 간주로 클래스 외부, 코드 자체가,이 속성을보고 생각하지하는 강력한 표시입니다 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.WSGIApplication
의 MyWSGIapp
를 사용하는 경우 :
는 훨씬 더 나은 아이디어는 속성이 공개적으로 볼 수 있도록하기 위해 자신의 코드에 WSGIApplication
을 하위 클래스입니다 clean, 고체 응용 프로그램의 다른 곳에서 관심있는 속성에 액세스하는 방법.
그래서 서브 클래 싱을 통해 캡슐화를 깨뜨리고 있습니다 ... 처음부터 직접 값을 읽는 것만 큼 위험하지 않습니까? –
이 제안은 캡슐화를 깨뜨리지 않으며 위험하지 않습니다. (당신이'WSGIApplication'의'__debug' 필드에 직접 접근하려는 것과는 달리) 여러분이 코드를 제어하기 때문에 거기에있는'debugmode'에 의존 할 수 있습니다. –
@Rosarch, 혼란 스럽네요 .- 어디에서 읽었습니까? 그렇지 않으면, 서브 클래 싱이 캡슐화를 깨뜨린 것을 "배웠"습니까? 하위 클래스 화는 OOP에서 기본적인 것입니다. 그리고 제가 제안한 서브 클래스는 기본 클래스의 _any_ 속성을 살펴 보지 않습니다. 즉석에서 '__init__'인수의 복사본을 "캡처"합니다. ** be ** at ** ** "encapsulation-breaking"? 당신의 걱정을 분명히하십시오. –