본문 바로가기
개발/Python

파이썬에서 Self란 뭘까?

by 보안매크로 2023. 9. 6.
728x90

def 함수(Self):

 파이썬을 하면서 한번쯤은 보셨을 Self입니다. def function(self): 에서 self가 의미하는 것은 무엇일까요? 바로 '인스턴스'입니다. 
 우리가 class를 사용하는 목표는 객체를 사용하겠단 말입니다. 이 객체가 바로 '인스턴스'라고 볼 수 있습니다. class를 사용해서 객체를 만들어 내는 것이죠. a = amuguna() 하면 클래스 amuguna의 성질을 가진 a라는 인스턴스가 생성된 것이죠.

class amuguna:
          def func1():
                    print("a")
          def func2(self):
                    print("a")   

라는 class가 있다고 칩시다.
기존에 class에서 메서드를 이용하는 방법에는
amuguna.func1()을 하거나, self를 이용하는 방법이 있다.

f = amuguna()
f.func1()  

를 실행하면 에러가 발생한다. 이유는 func1에는 () 가로안의 값이 없으니 인자를 전달하면 안되는데, 전달이 되서 에러가 난다. f = amuguna()를 할때 이미 인스턴스(인자)가 던져진 것이다. 따라서 

f = amuguna()
f.func2()  

를 실행하게 되면 정상 실행이 된다. 이유는 func2(self)는 self라는 인스턴스가 있기 때문이다. 여기서 self는 무슨값이냐고 묻는다면, 자동으로 할당을 해준다. 즉, 우리는 무슨값인지 알수가 없는 것이다. 반대로

f.func2()  

를 실행하면 에러가 발생한다. 이유는 self값이 인자로 들어가 있는데, func2를 호출할 때 인자가 전달되지 않아서 발생하는 것이다. 인자라는 것은 무엇인가? 어떠한 값이다. 그 값은 메모리에 특정 주소에 저장된다. 그 주소에 있는 값이 인자이고 func2 같은 경우는 f = amuguna()라는 인수 할당을 안해줬기 때문에 에러가 발생하는 것이다.

ps. 설명을 잘 못하지만 어느정도 도움이 되셨길 바랍니다.

728x90