일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 딥러닝
- tinyml
- MCU 딥러닝
- 그리디
- BFS
- 초소형머신러닝
- 코테 문제
- 다이나믹프로그래밍
- 컴퓨팅사고
- 포스코 ai 교육
- 코테
- 임베디드 딥러닝
- 자료구조
- 삼성코테
- 포스코 교육
- TensorFlow Lite
- DP
- dfs
- DP문제
- 코딩테스트
- bfs문제
- tflite
- sort
- 영상처리
- dfs문제
- 삼성역테
- 삼성코딩테스트
- 삼성역량테스트
- 알고리즘
- 포스코 AI교육
- Today
- Total
코딩뚠뚠
파이썬 self와 __init__ 에 대해 본문
파이썬을 쓰면서 self 와 __init__ 을 종종 볼 수 있었다
(물론 C++에서도 self 와 this 같은것을 볼 수 있다.)
self는 항상 메서드의 첫번째 인자여야된다 라고만 알고있었고 __init__은 초기화? 로 알고있었다.
이번 포스팅을 기점으로 확실히 배운 개념을 정리해보고자 한다.
self
self는 python의 클래스에서 쓰인다.
클래스에서 self의 의미는 '자기자신' 을 의미한다.
(뒤에서 더 알아보자)
그렇다면 클래스란 뭘까?
예를 들어 설명해보겠다.
만약 덧셈을 수행하는 함수가 있다고 생각해보자.
a = 0
b = 0
def sum_1(num):
global a
a += num
def sum_2(num):
global b
b += num
sum_1(1)
sum_2(1)
sum_1(3)
sum_2(4)
위와 같은 경우 a 의 정답은 4 b의 정답은 5가 될 것이다.
같은 연산을 수행하는 함수가 두개인 경우였지만 이와 같은 경우가 100가지가 있다면?
이럴 때 클래스를 사용하는 것이다.
class sum_res:
def __init__(self):
self.result = 0
def adder(self, num):
self.result += num
return self.result
sum_1 = sum_res()
sum_2 = sum_res()
sum_3 = sum_res()
이와 같이 sum_res라는 class를 만들 수 있었다.
adder 함수에서는 입력받은 num 값을 result에 더해서 반환한다.
class를 이용해 같은 작업(덧셈)을 하는 공장을 차린셈이다.
그럼 다시 본론으로 돌아와 self와 __init__ 은 뭘까
위의 예제에서 sum_1의 result를 알고자 하면 sum_1.result 로 표현할 수 있을 것이다.
앞에서 self는 '자기자신' 이라고 했다
그리고 우리는 sum_1 = sum_res()로 선언해주었기 때문에 sum_1(2) 와 같이 사용할 수 있다.
그렇다면 adder(self,num) 에서 self 인자를 빼먹고 num만 들어간 것인데 어떻게 가능한 걸까?
self 가 '자기자신' 이기에 가능하다.
즉 sum_res.(sum_1,2) == sum_1(2) 의 의미이다.
이제 self = 자기자신 = sum_1 이란 것을 이해할 수 있을 것이다.
__init__
인스턴스가 생성될 때 항상 실행되는 것이다.
흔히 initialize를 떠올릴 수 있다.
class sum_res:
def __init__(self):
self.result = 0
def adder(self, num):
self.result += num
return self.result
sum_1 = sum_res()
sum_2 = sum_res()
sum_3 = sum_res()
위 코드에서 sum_res Class를 통해 sum_1, sum_2, sum_3 의 인스턴스가 생성되었는데
각 인스턴스가 실행될 때는 항상 __init__ 함수가 실행된다.
각각 자신의 result를 0으로 만들어 준다는 것이다.
추가적인 예시코드
class Student:
name = ''
korean = 0
english = 0
math = 0
def __init__(self, name, kor, eng, math):
self.name = name
self.korean = kor
self.english = eng
self.math = math
def say_hello(self):
return '안녕하세요 {}님'.format(self.name)
def average(self):
return (self.korean + self.english + self.math) / 3
출처 : www.inflearn.com/questions/4642
Student class가 정의되어있고 stu_a 라는 인스턴스를 생성해보자
stu_a = Student('내이름', 80, 75, 80)
stu_a는 self 에 의해 self를 생략할 수 있었고 __init__ 을 통해 변수를 매개변수를 초기화해줄 수 있었다.
'공부 > 기타' 카테고리의 다른 글
코딩테스트 SQL (MySQL) (2) | 2021.04.13 |
---|---|
딥러닝, 데이터분석 pandas 기본사용 (0) | 2021.04.06 |
Git 개념 및 사용 2 (0) | 2021.02.07 |
Git 개념 및 사용법 1 (0) | 2021.02.07 |
docker 개념과 기본 사용 (0) | 2021.02.04 |