나름 파이썬을 접한지도 3년째지만, class를 완전히 이해하고 사용해본 적은 없습니다..
하지만, 오늘 멋쟁이 사자처럼 AI SCHOOL 수업을 듣고 드디어 class를 이해할 수 있게 되었습니다ㅎㅎ
그래서 저와 같이 class를 잘 이해 못하는 분들이 잘 이해할 수 있도록 잘 설명해보도록 하겠습니다.
이번 포스트를 통해 이해할 코드 예시입니다.
class Info:
def __init__(self, name):
self.default_info = ['엘사','안나','올라프']
self.default_info.append(name)
print('생성자가 호출되었습니다.')
def print_something(self):
print(self.default_info)
설명 들어가기에 앞서,
class 안의 모든 함수들은 method라고 부른다는 것을 기억해주세요.
그럼 설명 시작해보겠습니다.
1. def func(self)에서 self의 역할
class 객체 안의 모든 함수 안에 self를 써주는 이유는 뭘까요?
self를 쓰지 않게 된다면 위의 사진과 같이 error가 나게 됩니다.
error의 내용을 보면 0 positional arguments를 가져야 하는데 1개가 주어졌다고 하는 것을 알 수 있습니다. 하지만 저희는 argument로 아무것도 지정을 안했습니다.
이는 사실 내부에서는 info.print_something()의 형태가 아닌, info.print_something('info')의 형태로 실행되기 때문입니다.
"나는 어떤 사람인데 이 함수 실행시켜줘"로 들어가기 때문에 함수 내부에 "아예 누가(self)가 실행시켜달래요"를 저장하기 위해서 class에 있는 함수의 첫 번째 parameter는 self로 적기로 약속한 것입니다.
2. __init__의 역할
__init__은 class 내부의 어떤 methods를 사용하든 무조건 실행되게끔 하는 함수로, 우리는 이를 생성자(Constructor)라고도 부릅니다. 클래스를 따라 객체를 만들 때 초기화 값이라고 생각하시면 됩니다.
이렇게 info만 출력했을 때 '생성자가 호출되었습니다.'라고 잘 출력되고 있습니다.
3. self. 키워드의 역할
하지만, 클래스 info의 print_something() 메서드를 호출했을 때는 오류가 출력됩니다.
그 이유는 함수 내부에서 정의된 함수는 말 그대로 함수 내부에서만 인식되기 때문입니다. 이 경우에도 __init__의 메서드와 print_something()의 메서드는 다르기 때문에 __init__에서 정의된 default_info는 정의되지 않은 것입니다.
이를 함수 외부에서도 쓸 수 있도록 이어주는 것이 바로 self. 키워드입니다.
self. 키워드를 활용하면 함수의 scope를 뛰어넘어 접근이 가능한 것을 볼 수 있습니다.
이를 이해하셨다면 class 객체에 대한 전반적인 이해는 완료한 것입니다!
'멋쟁이 사자처럼 AI SCHOOL 5기 > Today I Learned' 카테고리의 다른 글
[2주차 총정리] pandas 유용한 함수 (apply, lambda, map 함수) 총정리 (0) | 2022.03.22 |
---|---|
[2주차 총정리] pd.DataFrame 기초 함수, hist 함수, pivot_table, 결측값 처리 방법 (0) | 2022.03.22 |
[2주차 총정리] open 함수 이용하여 텍스트 파일(.txt, .csv, ...) 읽고 쓰기 (+ pickle과의 차이점) (0) | 2022.03.22 |
[2주차 총정리] Python 반복문 유용한 기능(enumerate, zip, tqdm) 및 함수(Counter) 총정리 (0) | 2022.03.21 |
[1주차 총정리] Jupyter Notebook 편리한 키보드 단축키(Shortcuts) 총정리 (0) | 2022.03.21 |