2013-08-07 6 views
0

은 (파이썬) 고려 default_start(), main_behaviour(), default_end(), custom_start()custom_end() 단지 설명을 위해 코드 필러있다.하위 클래스에서 사용자 정의 할 동작을 언제 별도의 메서드에 넣어야합니까? <p></p>는 전역 함수를 가정합니다 :

class Parent: 
    def on_start_main(self): 
     default_start() 

    def main_behaviour(self): 
     main_behaviour() 

    def on_end_main(self): 
     default_end() 

    def main(self): 
     self.on_start_main() 
     self.main_behaviour() 
     self.on_end_main() 

class Child(Parent): 
    def on_start_main(self): 
     custom_start() 

    def on_end_main(self): 
     custom_end() 

class Parent: 
    def main_behaviour(self): 
     main_behaviour() 

    def main(self): 
     default_start() 
     self.main_behaviour() 
     default_end() 

class Child(Parent): 
    def main(self): 
     custom_start() 
     Parent.main_behaviour(self) 
     custom_end() 

대 I 바람직하다이 어떤 모르겠지만, 두 번째 생각한다. 이것은 맛의 문제입니까, 아니면 왜 다른 사람보다 낫다는 구체적인 이유가 있습니까?

감사

답변

2

나는 하나 개의 단순한 이유로 최초의 솔루션을 선호하는 것 :

당신이 바로 on_start_main을 무시하고 on_end_main 변경을두고하는 Child 클래스합니다.

첫 번째 해결 방법을 선택한 경우 on_start_main 메서드를 무시하고 완료합니다. Parent 클래스에서 수행하는 작업을 알거나 신경 쓰지 않아도됩니다. on_end_main입니다. 두 번째 솔루션을 선택하는 경우

당신은 Parent 클래스가 정확히 main 방법에서와 정확히 알고, 그래서뿐만 아니라 당신은 Parent 클래스의 소스로 파고뿐만 아니라 코드가 이미 작성 복제해야합니다.

+0

예, 어쩌면 그것은 바보 같은 질문이었습니다. 내 코드를 리팩토링하는 것이 좋다면 자연스럽게 첫 번째 방법이 이루어져야합니다. – Scruffy