파이썬 클래스와 self 설명

2022. 1. 21. 17:52·Python

파이썬 클래스를 사용하다보면 self라는 인자를 보게 됩니다. 특별히 메소드(클래스 내에서 정의된 함수)를 사용할 때 첫 번째 인자로 self가 들어가 있는 것을 볼 수 있는데요. 이는 무엇이며 어떤 원리로 작동하는 것일까요?

 

먼저, 클래스에 대해 간략히 살펴보겠습니다. 클래스는 앞으로 생성할 인스턴스들의 청사진이라고 할 수 있습니다. 즉, 클래스를 사용하면 동일한 기능을 포함한 여러 인스턴스를 생성할 수 있습니다.

 

그렇다면 self란 무엇일까요? self는 클래스를 통해 구현된 각 인스턴스를 가리킵니다. 예를 들어 살펴보겠습니다. 다음과 같이 Cat 클래스가 있다고 해보겠습니다.

class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age  = age

    def info(self):
        print(f"Hello, My name is {self.name}. I am {self.age} years old.")

이제 Cat 클래스를 통해 두 개의 서로 다른 인스턴스를 생성해보겠습니다.

cat1 = Cat('Navi', 2)
cat2 = Cat('Myo', 3)

cat1과 cat2 인스턴스는 Cat 클래스를 통해 생성되었으며, 서로 다른 속성 값을 갖습니다.

 

이제 클래스 내의 info 메소드를 호출해보도록 하겠습니다.

Cat.info(cat1)
# Hello, My name is Navi. I am 2 years old.
Cat.info(cat2)
# Hello, My name is Myo. I am 3 years old.

의도한대로 cat1과 cat2에 해당하는 속성을 따라 정보가 출력되었습니다. 이는 메소드 호출 시 첫번째 인자로 자동으로 self가 전달되었기 때문에 가능한 일입니다. 이 경우, self는 Cat.info(cat1에서는 cat1이 되고, Cat.info(cat2)에서는 cat2 가 됩니다. 이처럼 self를 통해 Cat이라는 하나의 클래스에 정의된 메소드를 각 인스턴스에서 사용할 수 있게 되는 것입니다.

 

한 가지 경우를 더 살펴보도록 하겠습니다. 다음과 같이 메소드 호출을 진행하면 위와 동일한 결과가 리턴됩니다.

cat1.info()
# Hello, My name is Navi. I am 2 years old.
cat2.info()
# Hello, My name is Myo. I am 3 years old.

그런데 자세히 살펴보면 조금 의아합니다. 메소드를 호출하며 아무런 인자를 전해주지 않았는데 오류가 발생하지 않는 이유는 무엇일까요?

 

앞서 살펴본 것처럼 cat1은 Cat 클래스를 통해 구현된 인스턴스이고, 우리는 클래스 내의 info 메소드를 사용하고자 합니다. 우리는 cat1.info()을 입력했지만 이는 실제로는 Cat.info(self, cat1)이 되어 전달됩니다. 즉, 해당하는 인스턴스가 self 인자로 전달되어 이에 해당하는 속성을 사용할 수 있게 되는 것입니다.

 

참고: Self in Python, Self 설명

반응형

'Python' 카테고리의 다른 글

파이썬 리스트 컴프리헨션 사용 방법 정리  (0) 2022.02.04
파이썬 문자열 포매팅 방법  (0) 2022.01.30
파이썬 패키지 정리  (0) 2022.01.12
파이썬 모듈 사용 방법 정리  (0) 2022.01.12
파이썬 데코레이터 설명  (0) 2022.01.04
'Python' 카테고리의 다른 글
  • 파이썬 리스트 컴프리헨션 사용 방법 정리
  • 파이썬 문자열 포매팅 방법
  • 파이썬 패키지 정리
  • 파이썬 모듈 사용 방법 정리
휘 Hwi
휘 Hwi
개발자 성장 로그
  • 휘 Hwi
    개발자 로그: 변화를 위한 공간
    휘 Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 101 (1)
      • Web | Internet (4)
      • HTML | CSS (4)
      • Python (9)
      • Django (20)
      • Javascript (0)
      • Node.js (0)
      • React (0)
      • React Native (0)
      • Database (1)
      • Git (1)
      • Terminal | Vim (1)
      • Auth | Security (4)
      • AWS (0)
      • Docker (0)
      • Kubernetest (1)
      • Deployment (1)
      • Project (2)
      • TIL (12)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    깃
    정규 표현식
    깃 에러 해결
    깃 오류
    TIL
    장고 Views
    JWT
    배포
    장고 프로젝트
    파라미터
    css
    함수
    요소 크기 설정
    파이썬
    JWT 인코딩
    새 탭에서 열기
    target="_blank"
    HTTP
    깃 퍼블릭 키 등록
    프로젝트 회고
    요소 상대 크기
    HTTP GET 요청
    HTTP POST 요청
    html
    장고 URL
    깃 ssh
    요소 절대 크기
    장고
    탭내빙
    JWT 디코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
휘 Hwi
파이썬 클래스와 self 설명
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.