1. self 키워드
-
self는 클래스로 생성한 변수(== 인스턴스) 자신의 주소를 나타내는 키워드입니다.
-
이렇게 자신의 주소를 나타내야 하는 이유는, 인스턴스는 양식은 같지만 내용물은 독립적으로 저장되기 때문입니다.
-
self 키워드를 이용하게 되면 좀 더 편하게 자료를 불러올 수 있습니다.
- self 키워드를 이용해서 굳이 여러 줄로 원하는 출력 정보를 기입하지 않고도 한줄로 해결할 수 있다.
- 강사 정보를 기입 후 출력해보자.
- 앞에서 def t_info(self)로 세부 정보를 함수로 불러왔을 경우 출력되는 형식을 지정하였다.
- 실제 출력형태를 보면 t1.t_info()에서 앞에 자칭 100번지로 지정이 되어 있는 t1의 주소를 위 함수의 self로 받아 출력 형식대로 정보를 출력하였다.
2. self 키워드 응용
- 내용물을 좀 더 편하게 초기화시킬수 있도록 클래스를 다시 정의합니다.
- 위 3개 변수에 값을 한 줄로 넣어주는 메서드(함수)를 이용해 좀 더 압축적으로 코딩이 가능합니다.
- 위의 내용을 압축한 함수를 실행시켜 봅시다.
- save_info라는 함수에 n, s, a라는 변수들을 지정해 놓고 그 자리에 정보를 입력했지만 결과값은 0이 뜨고 말았다.
- 왜 이런 결과가 도출된 것일까요?
- 그것은 함수에 변수를 잡을때 self를 붙여주지 않았기 때문에 컴퓨터 입장에서는 클래스 수준에서의 변수를 말하는 것인지 save_info 함수 수준에서의 변수인지 구별하지 못하기 때문입니다.
- 밑의 그림에서 나오듯 save_info()함수의 변수들에 self가 붙은 것들은 클래스 소속이지 함수의 소속이 아니다.(클래스에서 설정한 형식을 끌어와야 하기 때문에)
- 클래스 소속의 변수들을 멤버변수라고 하며 필드(feild)라고도 부른다.
- 이런 식의 구분은 self가 어떻게 활용되는가에 대해 좀 더 보여준다고 생각합니다. self를 붙이게 되면 결과값이 어떻게 될지 봅시다.
![](https://velog.velcdn.com/images/ball/post/f7c8b39d-d0aa-4ced-b533-d94930d0bf7d/image.png)
- 입력한 자료값대로 출력이 되는 것을 알 수 있습니다.
3. 생성자 함수
생성자 함수
-
클래스 내부에 __init__
이라는 명칭으로 선언한 함수는 생성자 함수가 됩니다.
-
생성자 함수를 정의하면 사용자가 클래스의 인스턴스를 생성할 때 반드시 입력해야 하는 요소를 강제로 입력해야만 하는 상황을 만들어 줄 수 있습니다.
-
클래스를 생성한 후 자료값을 안넣고 실행하는 경우가 생김 (출력값이 0으로 뜨거나) 이러한 불편점을 개선하기 위해 클래스 생성 시에 자료값을 넣어주게끔 강제하는 함수이다. -> 사용자 입장에서도 절차가 줄어들어 편하다.
-
클래스 생성 및 __init__
함수 생성
-
__init__
함수는 생성자 함수로 생성시 자동으로 1번만 호출되는 함수입니다.
- 생성 시에 init 에서 필요로 하는 자료를 입력해야 합니다.
- class Cat 밑에 함수
__init__
을 설정하였기 때문에 class Cat 호출 시 __init__
이 불려나온다. (self와 비슷한 개념)
__init__
함수를 생성자 함수라고 한다.
- 변수 생성과 함께 정보를 입력하지 않으면 오류 출력 : 같이 입력함으로서 효율성을 높일 수 있다.
-
예제
- cat1에 대해서 상세 정보를 조회할 수 있는 get_info()와
- print("야옹 야옹")을 실행해주는 함수 meow()를 정의해주시고 호출해주세요.
-
코드
- 변수는 특정 대상의 상태 / 메서드는 특정 대상의 행동 : 결과값은 상태(변수)값에 따라 달라진다. 마지막에 나오는 meow함수는 db의 상태에 영향을 받는다.