[Python] self 이해하기

turtleJ·2023년 4월 16일
0

언어

목록 보기
3/11

self에 대한 고찰

클래스 내의 메서드를 생성할 때, 인자로 항상 self를 가지고 있어야한다.

이 self에 대해 알아보자.

  • 클래스 정의
>>> class Foo:
	def func1():
		print("function 1")
	def func2(self):
		print("function 2")

위에 처럼 클래스 Foo에 대해 정의 했을 때 self인자를 전달하지 않아도(func1의 경우) 클래스 정의에 오류가 발생하지 않는 것을 알 수 있다.

  • 인스턴스 생성
>>> f = Foo()
>>> f.func1()
Traceback (most recent call last):
  File "<pyshell#94>", line 1, in <module>
    f.func1()
TypeError: func1() takes 0 positional arguments but 1 was given
>>> f.func2()
function 2

하지만 인스턴스를 생성하고 사용시에 self를 인자를 갖고있는(func2) 메서드는 사용가능한 반면 갖고 있지 않은(func2) 메서드는 에러가 뜨는 것을 확인할 수 있다.

그 내용을 들여다보면 “func1메서드가 인자를 받지 않고 있는데 1개의 인자가 주어져서 생긴 에러”임을 알 수 있다.

그렇다면 주어지는 인자는 무엇일까? 코드로 알아보자.

  • 클래스 재정의
>>> class Foo:
	def func1():
		print("function 1")
	def func2(self):
		print(id(self))
		print("function 2")
  • 인스턴스와 self객체의 메모리 주소값 확인
>>> f = Foo()
>>> id(f)
68304528
>>> f.func2()
68304528
function 2

위 코드를 통해 self의 정체가 인스턴스 객체 그 자체라는 것을 알 수 있다. 따라서 이 self를 통해 인스턴스 멤버에 접근할 수 있으며 인스턴스 메서드의 첫번째 인자에 자동으로 바인딩 된다는 것을 알 수 있다.

profile
꾸준함을 무기로 성장하는 개발자가 되겠습니다.

0개의 댓글