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 답변
-
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()
댓글 입력