django에서 사용되는 python super함수에 대해서

조회수 3129회

django의 classbased View를 공부하다보니

함수를 override할때 return 값으로 super(class, self)... 이런 식으로 진행되는 경우가 있는데

아무리 찾아보아도 이 super함수에 대한 개념이 명확하게 이해되질 않습니다.

super를 사용하면 최상위의 부모클래스의 호출이 중복되는 경우 한번만 호출한다고 하긴하는데

상속받은 클래스는 CreateView 하나만 상속받아서 중복이 발생할 일이 없어보이는데 super를 사용하는 이유를 잘 모르겠습니다.

제가 접한 함수는 from_valid함수로써 클라이언트에서 넘어온 form이 유효할 경우 실행되는 함수로 알고 있습니다.

이 코드를 그냥 붙여넣으면 제대로 동작한다는 것은 알지만 저는 return super(ExCreateView, self).form_valid(form) 이 동작하는 로직을 좀 알고싶습니다.

class ExCreateView(CreateView):
    def form_valid(self, form):
        # form.instance.user = self.request.user
        return super(ExCreateView, self).form_valid(form)

도움을 부탁드립니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    python2에서는 super에 자신의 클래스를 넘겨 주어야 바로 직속 부모 클래스의 메소드를 사용할 수 있습니다. form_valid에서도 상속과정에서 부모에 정의된 form_valid를 모두 실행하기 위해 저렇게 실행한 것 같네요.

    python2는 이렇게 해야 하지만

    class A(object):
       def foo(self):
          print "A"
    
    class B(A):
       def foo(self):
          print "B"    
          super(B, self).foo()
    
    class C(B):
       def foo(self):
          print "C"    
          super(C, self).foo()
    
    c = C()
    c.foo()
    

    python3는 이렇게만 해도 됩니다.

    class A(object):
       def foo(self):
          print("A")
    
    class B(A):
       def foo(self):
          print("B")    
          super().foo()
    
    class C(B):
       def foo(self):
          print("C")
          super().foo()
    
    c = C()
    c.foo()
    
    • 아 상속받은 클래스의 메소드까지 함께 호출하기 위해서 super 메소드를 사용했군요 한민수 2017.3.28 19:57

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)