super()에 대해 문의드립니다.
545
작성한 질문수 7
파이썬 입문인데 강의가 참 재미있습니다.
보면서 잘이해 안가는부분은 class 개념입니다 .
특히 클래스 속에 함수에 __init__하는부분과
super().__init__() 이 잘이해 안됩니다.
이부분 설명좀 부탁드립니다. ㅠㅠ
답변 1
7
재미 있으시다니 저도 입문하던 시절 밤새 이것저것 만들어보던 기억이 새록새록 합니다. ^^;;
일단 __init__() 함수는 클래스가 생성되면 가장 먼저 실행되는 영역입니다. 보통 초기화 하는 영역이라고 얘기하는데 예를 들어서..
class Test:
def __init__(self):
print("클래스가 생성되었습니다")
a = Test()
위의 예제에서 처럼 a = Test() 이렇게 Test 클래스가 생성되면 가장 먼저 호출 되는 영역이 __init__(self) 영역이 됩니다. 실제 a 라는 변수에 Test() 클래스를 생성해서 변수에 담았을뿐 a 를 갖고 아무것도 하지 않았음에도 불구하고 __init__(self) 함수가 호출이 되는걸 보실 수 있습니다. 편의상 이걸 생성자 함수라고 하기도 하는데 정확하게는 생성자 함수는 아닙니다. 어쨌든 이때 __init__() 함수가 호출될때 클래스에서 사용되는 변수 같은걸 초기화 하게 됩니다.
super().__init__() 는 부모를 상속받아서 만들어진 자식클래스에서 부모 클래스의 생성자를 호출할때 사용하는 메소드가 super() 입니다. 역시 예를 들어
class Parent:
def __init__(self):
print("부모 클래스가 생성되었습니다")
class Child(Parent):
def __init__(self):
print("자식 클래스가 생성되었습니다.")
a = Child()
위의 예제에서 처럼 a = Child() 클래스를 생성하면 "자식 클래스가 생성되었습니다." 만 출력 됩니다. 자세히 보시면 Child(Parent) 클래스는 Parent 클래스를 상속받아서 만들어지는 클래스입니다. 상속의 개념은 좀 쉽게 단편화 해서 설명드리자면 부모의 기능에 어떤 기능을 추가하여 확장된 새로운 클래스를 만든다고 보시면 됩니다. 이런 경우 부모의 특성과 기능을 포함한 자식 클래스가 생성되야 하는데 이때 부모의 클래스에서 사용하던 어떤 변수들이 초기화 되지 않으면 부모 클래스가 정상적으로 동작하지 않기 때문에 대부분 상속받은 자식 클래스의 입장에서는 부모 클래스의 초기화 함수를 수행해야 하게 됩니다. 그래서 위에서 Child 클래스는
class Parent:
def __init__(self):
print("부모 클래스가 생성되었습니다")
class Child(Parent):
def __init__(self):
# 부모 클래스의 __init__() 를 호출하기 위해 super() 메소드를 사용합니다.
super().__init__()
print("자식 클래스가 생성되었습니다.")
a = Child()
이런식으로 super() 메소드를 활용해서 부모 클래스의 초기화 함수 부분을 먼저 수행하고 자식 클래스에서 자신의 초기화 영역을 수행하는게 일반적입니다. 이렇게 얘기하면 사실 이 내용은 참 별거 없는 내용입니다만 중요한 사실은 왜 클래스를 쓰느냐를 내가 느낄 수 있어야 한다는 점입니다.
class 라는 개념이 입문하시는 분들께 어렵게 느껴지실 수 있습니다. 저 또한 프로그래밍을 입문하던 시절에 설명을 읽을때머리로는 알겠는데 이해하기에는 어려운... 뭐 그런 개념이 바로 객체지향적인 개념이였습니다.
객체 지향적이다라는건 사실 어떤 무언가를 만들때 그걸 하나하나 모듈(부품)화 시켜서 나중에 조립해서 완성한다.. 라는 개념으로도 볼 수 있는데 이게 실제 내가 프로그래밍을 하다가 코드의 재사용을 너무 반복하고 있거나 아니면 내가 지금 만든 코드를 다른 프로그램을 만드는데 또 쓸 수 있을것 같은데.. 이런데서부터 시작하게 되는 경우가 많습니다. 그러면 그걸 어떻게 객체화 시킬지를 고민하게 될테고 그럴때 이해가지 않던게 이해가기도 합니다.(제 경험입니다... )
모든걸 다 이해하고 넘어가면 좋겠지만 때로는 대충 흐름만 알고 넘어가도 괜찮은 부분들도 많습니다. 가장 중요한건 재미와 관심을 잃지 않아야 하는거지 어떤 문제를 이해했네 못했네는 차후 문제일 수도 있습니다. 재미를 갖고 프로그램을 쉬운거부터 자꾸 만들어보고 코딩해보고 하다보면 자연스레 이해되는 부분도 상당히 많습니다.
도움이 되셨으면 좋겠습니다. 질문은 언제나 환영합니다. ^^
38강 = 연산자 더하고 빼기
0
60
2
주석처리
0
117
1
함수의 파라미터값 msg
0
155
1
강의자료 이미지 안나옴
0
239
3
강의자료 질문 두번째
0
165
3
강의자료 관련 질문
0
116
1
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
0
235
1
소수 너무 어려워요
0
245
1
imagefont 함수 사용
0
239
1
pylint
0
357
1
add 함수 문의 ㅠㅠ
0
283
1
형식 문의드립니다.
0
209
1
변수 명을 왜 src, tar로 하셨는지 궁금합니다.
0
602
1
숫자야구 코드를 짜 봤는데 뭔가 이상합니다.
0
253
1
zsh: command not found: pylint
0
269
1
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
0
546
1
질문드립니다.
1
374
2
list.reverse() 출력에 대해서 질문있습니다.
1
433
1
데코레이터 함수 및 동작시간 질문입니다.~
1
323
2
opencv 사용하면서 궁금한점 (해상도)
1
781
1
질문드립니다.
1
299
1
아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?
1
445
1
크롤링안되는 현상 문의 드립니다.
1
421
1
파이썬 크롤링 관련 문의
1
277
1





