파이썬 클래스를 사용하다보면 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 |