파이썬에서 self 는 c#이나 자바의 this와 같은 역할을 한다. 접근제한이 적용되어 해당 클래스의 변수나 메서드에 접근하여 데이터를 처리하고 가공할 수 있다. C#이나 자바의 this 의 기능을 이해한다면 파이썬의 self를 이해하는데는 어렵지 않을 것이다.
파이썬 클래스 self 파라미터 역할과 사용법
python class self parameter
파이썬 클래스를 생성하고 초기화할 때 init 메서드를 사용한다.
init 메서드는 자바나 C#의 생성자와 비슷한 동작을 한다.
차이가 있다면 파이썬 생성자인 init 함수를 사용할 때 self 파라미터를 인자값 첫번째로 넣어주어야 한다.
self 파라미터 역할
파이썬의 self 파라미터은 자바나 C#의 this 와 비슷한 역할을 한다.
자바나 c# 에서 this 는 변수명이 비슷하거나 같은 단어로 중복이 될 떄 해당 클래스내의 변수 또는 함수들을 가리킨다.
파이썬의 self도 마찬가지
self 가 작성된 클래스 내의 변수와 메서드 등에 접근할 수 있게 한다.
접근제한이 있다면 해당 클래스에서만 접근이 가능하다.
self 생략
파이썬에서 생성자 역할을 하는 init 함수를 사용할 때 굳이 self 란 단어를 사용하지 않아도 되지만, 대체되는 다른 단어는 넣어주어야 한다.
어떤 이름을 사용해도 상관없다.
단지, self 란 단어를 대체하여 사용될 뿐이지만 역할은 같다.
샘플코드
직접코드를 작성해 본다.
self 란 단어를 사용하지 않고 임의의 다른 단어를 사용할 것이다.
클래스에 지정된 init 함수나 클래스 메서드나 인자값을 엉터리로 마구잡이로 넣었다.
그럼에도 파이썬은 self 인자값을 사용했을 때와 같은 역할을 한다.
print('----------')
#- 클래스부분
class ClsMbtiTest : #-{
def __init__(thisClass, name, mbti, avengers) : #-{
thisClass.name = name
thisClass.mbti = mbti
thisClass.avengers = avengers
#-}
def fnIdolInfo(param) : #-{
print("---- MBTI 정보 ----")
print("검사자 이름", type(param.name), param.name)
print("MBTI 결과", type(param.mbti), param.mbti)
print("비슷한 어벤져스", type(param.avengers), param.avengers)
#-}
#-}
idol1 = ClsMbtiTest("크리스 에반스", "ISFJ", "캡틴 아메리카");
idol1.fnIdolInfo()
print('----------')
idol2 = ClsMbtiTest("스칼렛 요한슨", "ISTP", "블랙 위도우");
idol2.fnIdolInfo()
print('----------')
idol3 = ClsMbtiTest("크리스 햄스워스", "ESTJ", "토르");
idol3.fnIdolInfo()
print('----------')
idol4 = ClsMbtiTest("로버트 다우니 주니어", "ENTP", "아이언맨");
idol4.fnIdolInfo()
print('----------')
결과화면을 보자.
무엇을 어떻게 작성하든 self 을 작성했을 때와 동일한 작업을 수행하는 것을 볼 수 있다.
굳이 의미를 부여해 본다.
c#이나 자바에 익숙한 사람이라면 개념적으로 금방 이해할 수 있다.
하지만, 명명법에 대해서는 난해할 수 있다.
그렇다면 비슷하게 이름을 작성해 보면 어떨까.
물론, 메서드의 이름과 메서드에 사용하는 인자값의 단어는 의미가 있는 것이 좋다.
위의 코드를 조금만 변경해 본다.
print('----------')
#- 클래스부분
class ClsMbtiTest : #-{
def __init__(this, name, mbti, avengers) : #-{
this.name = name
this.mbti = mbti
this.avengers = avengers
#-}
def fnIdolInfo(mbti) : #-{
print("---- MBTI 정보 ----")
print("검사자 이름", type(mbti.name), mbti.name)
print("MBTI 결과", type(mbti.mbti), mbti.mbti)
print("비슷한 어벤져스", type(mbti.avengers), mbti.avengers)
#-}
#-}
idol1 = ClsMbtiTest("크리스 에반스", "ISFJ", "캡틴 아메리카");
idol1.fnIdolInfo()
print('----------')
idol2 = ClsMbtiTest("스칼렛 요한슨", "ISTP", "블랙 위도우");
idol2.fnIdolInfo()
print('----------')
idol3 = ClsMbtiTest("크리스 햄스워스", "ESTJ", "토르");
idol3.fnIdolInfo()
print('----------')
idol4 = ClsMbtiTest("로버트 다우니 주니어", "ENTP", "아이언맨");
idol4.fnIdolInfo()
print('----------')
변경된 부분은 클래스의 self 인자값고 메서드의 인자값 뿐이다.
그럼에도 동일한 결과가 나타나는 것을 볼 수 있다.
어쨌든 이름을 다르게 사용하더라도 self 와 같은 역할을 한다라는 것만 이해하자.
'programming > Python' 카테고리의 다른 글
파이썬 클래스 객체 변수 프로퍼티 삭제하기 Delete Python class object property (0) | 2021.11.09 |
---|---|
파이썬 클래스 변수 프로퍼티 수정하기 python class variable property update (0) | 2021.11.08 |
파이썬 클래스 함수 사용 방법 python class method (0) | 2021.11.06 |
파이썬 클래스 생성자 초기화 함수 init 사용 python class constructor init function (0) | 2021.11.06 |
파이썬 클래스의 개념 객체 생성 방법 python class and object (0) | 2021.11.05 |
댓글