파이썬 클라스 설명 (3) self와 __init__이란?

2021. 12. 21. 23:15·개발/Python

파이썬에서 클라스 내부 함수인 메소드를 정의하고 호출할 때 self와 __init__을 활용할 수 있습니다. 이는 정확히 어떤 의미와 용도인 것일까요? 예시를 통해 자세히 살펴보도록 하겠습니다.

self 설명

다음과 같이 식당에서 인원 수에 따라 메뉴를 주문하는 간단한 클라스가 하나 있다고 해보겠습니다.

class Cooking:
    def makingLunch(self, menu, people):
        print(menu + " " + people + "인분 준비 중입니다.")

order = Cooking()
order.makingLunch("김밥", "3")

# 김밥 3인분 준비 중입니다.

위 makingLunch 함수는 첫 번째 인자로 self를 받고 두 번째, 세번 째 인자로 menu와 people을 받습니다.

 

여기서 menu와 people에는 사용자 지정 값인 "김밥과 "3"이 각각 대입되지만, "첫 번째 인자인 self에는 클라스를 호출한 order 인스턴스가 대입됩니다. 아래에서 이를 확인할 수 있습니다.

class Cooking:
    def makingLunch(self, menu, people):
        print(menu + " " + people + "인분 준비 중입니다.")
        print(self == order)

order = Cooking()
order.makingLunch("김밥", "3")

# 김밥 3인분 준비 중입니다.
# True

정리하자면 클라스 내에서 self는 이를 호출한 인스턴스를 의미합니다. 따라서 self를 다음과 같이 활용해볼 수 있습니다.

class Cooking:
    def waiting(self, number):
        self.number = number
    def makingLunch(self, menu, people):
        print(self.number + "번 고객님, " + menu + " " + people + "인분 준비 중입니다.")

order = Cooking()
order.number = "1"
order.makingLunch("김밥", "3")

# 1번 고객님, 김밥 3인분 준비 중입니다.

__init__ 설명

이제 __init__에 대해 알아보도록 하겠습니다. __init__은 클라스를 통해 인스턴스를 생성할 때 항상 실행되는 부분을 의미합니다.

 

예시를 들어 살펴보도록 하겠습니다. 이전의 Cooking 클라스 코드에서는 다음과 같이 출력 문구를 바꾸면 주문 번호(self.number)를 할당하지 않아도 주문을 진행할 수 있습니다.

class Cooking:
    def waiting(self, number):
        self.number = number
    def makingLunch(self, menu, people):
        print("고객님, " + menu + " " + people + "인분 준비 중입니다.")

order = Cooking()
order.makingLunch("김밥", "3")

# 고객님, 김밥 3인분 준비 중입니다.

물론, 기존 코드에서 주문 번호를 입력하지 않으면 다음과 같이 에러가 발생합니다.

class Cooking:
    def waiting(self, number):
        self.number = number
    def makingLunch(self, menu, people):
        print(self.number + "번 고객님, " + menu + " " + people + "인분 준비 중입니다.")

order = Cooking()
order.makingLunch("김밥", "3")

# AttributeError: 'Cooking' object has no attribute 'number'

그러나 앞서 살펴본 것처럼 출력 문구에 number가 사용되지 않는 경우, 사용자는 이를 입력하지 않아도 Cooking 클라스를 사용할 수 있습니다.

 

대기 번호가 없이는 주문을 할 수 없도록 할 수는 없을까요?

 

다음과 같이 waiting 함수의 이름을 __init__으로 대체하면, 클라스를 통해 인스턴스를 생성할 때 반드시 number 인자를 함께 넘겨줘야 호출이 가능합니다.

class Cooking:
    def __init__(self, number):
        self.number = number
    def makingLunch(self, menu, people):
        print("고객님, " + menu + " " + people + "인분 준비 중입니다.")

order = Cooking()
order.makingLunch("김밥", "3")

# TypeError: Cooking.__init__() missing 1 required positional argument: 'number'

번호를 입력하지 않았더니 오류가 발생했습니다. 이번에는 번호를 입력해보겠습니다.

class Cooking:
    def __init__(self, number):
        self.number = number
    def makingLunch(self, menu, people):
        print(self.number + "번 고객님, " + menu + " " + people + "인분 준비 중입니다.")

order = Cooking("2")
order.makingLunch("김밥", "3")

# 2번 고객님, 김밥 3인분 준비 중입니다.

예상했던 문구가 정상적으로 출력되었습니다. 마지막으로 다음과 같이 코드를 조금 수정하여 사용자로부터 대기 번호를 받고 문구를 출력할 수 있습니다.

class Cooking:
    def __init__(self, number):
        self.number = number
    def makingLunch(self, menu, people):
        print(self.number + "번 고객님, " + menu + " " + people + "인분 준비 중입니다.")

order = Cooking(input(str("주문 번호를 입력하세요: ")))
order.makingLunch("김밥", "3")

# 주문 번호를 입력하세요: 2
# 2번 고객님, 김밥 3인분 준비 중입니다.

'개발 > Python' 카테고리의 다른 글

파이썬 클라스 설명 (2) 인스턴스와 메소드란?  (0) 2021.12.13
파이썬 클라스 설명 (1) 클라스란?  (0) 2021.12.13
파이썬 함수 설명 (2) 변수와 스코프  (0) 2021.12.09
'개발/Python' 카테고리의 다른 글
  • 파이썬 클라스 설명 (2) 인스턴스와 메소드란?
  • 파이썬 클라스 설명 (1) 클라스란?
  • 파이썬 함수 설명 (2) 변수와 스코프
  • 파이썬 함수 설명 (1) 입력과 출력
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발 N
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git N
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
파이썬 클라스 설명 (3) self와 __init__이란?
상단으로

티스토리툴바