[Python] self 이해

2021. 7. 29. 18:50· Python/Python 정리
목차
  1. self
  2. self의 위치 
728x90
반응형

 

이번 포스팅은 python을 사용하며 클래스에서 self의 이해를 깊게 하기 위해 정리한 것입니다.


self

- self는 class를 포스팅할 때 썼지만 처음에는 클래스에 정의된 함수인 메서드의 첫 번째 인자는 self 다!라고 외우고 지나갔습니다. 하지만 사용하면 할수록 self는 계속 나오는데 이해는 안 되고 하여 정리하고자 합니다. 

 

- 결론을 얘기하자면 self는 클래스의 인스턴스 그 자체를 말합니다. 즉, 객체 자기 자신을 참조하는 매개변수입니다.

 

예시를 들어 알아보겠습니다.

 

- self를 전달하지 않는 메서드

class Food:
    def eatPizza():
        print('yam')
        
good = Food()
good.eatPizza()

 

- 결과 

 

 

에러는 eatPizza 메서드에 arguments를 전달했지만 받는게 없어서 문제가 발생했습니다. 

 

- eatPizza에 self 매개변수를 전달

 

class Food:
    def eatPizza(self):
        print('yam')
        
good = Food()
good.eatPizza()

 

 

- 결과 

 

문제 없이 잘 수행된 것을 볼 수 있고

알 수 있는 것은 클래스의 메서드에 self를 첫 번째 인자로 받도록 해주어야 하는 것입니다. 

또한 우리가 매개변수에 self를 쓰지 않아도 파이썬에서 자동으로 self를 전달한 것을 볼 수 있습니다. 


그러면 self는 어디에 있을까요?

self의 위치 

- 앞서 포스팅 했던 객체의 주소를 알려주는 id() 함수를 이용하여 위치를 알아보겠습니다.

 

class Food:
    def eatPizza(self):
        print('self id : ',id(self))
        print('yam')

good = Food()
good.eatPizza()
print('good id : ', id(good))

 

- 결과

 

 

결과를 확인해보니 인스턴스 good의 주소와 self의 주소가 같은 것을 볼 수 있습니다.

여기서 알 수 있는 점은 good과 self가 같다는 점입니다! 

 

- 인스턴스 없이 클래스 함수 호출될 경우

 

class Food:
    def eatPizza(self):
        print('self id : ',id(self))
        print('yam')
 
Food.eatPizza()

 

- 결과

 

 

good이라는 인스턴스가 없이 클래스의 함수를 호출했더니 에러가 발생했습니다! 

이 에러는 앞서 self 없이 호출하여 에러가 발생한 것과 같습니다. self를 전달하지 않아 발생하는 에러입니다!

 

즉, 클래스는 인스턴스를 만들지 않아도(good = Food()를 통해 good 변수에 Food 객체를 담지 않아도) 호출은 할 수 있지만 self를 전달하지 않아 에러가 발생하는 결과를 얻었습니다.

 

어떻게 해결해야 할까요?

 

- self는 인스턴스라고 했습니다. 그러므로 인스터스를 전달해주면 됩니다. 

 

class Food:
    def eatPizza(self):
        print('self id : ',id(self))
        print('yam')

good = Food()
print('good id : ',id(good))
Food.eatPizza(good)

 

- 결과

 

 

결과는 위에서 good을 만들어 good.eatPizza()를 실행한 것과 같지만 Food.eatPizza()와는 조금 다릅니다.

 

 

 

여기서 전달되는 인스턴스는 Food 객체를 통해 만든 인스턴스가 아니어도 결과를 얻을 수 있습니다!

 

class Food:
    def eatPizza(self):
        print('self id : ',id(self))
        print('yam')

class test :
    print('test')

test = test()
    
good = Food()
good.eatPizza()
print('good id : ', id(good))

Food.eatPizza(test)

 

- 결과

 

 

self에 대해 이해를 잘 하지못했었는데 정리를 통해

어느 정도 이해를 할 수 있게 되었습니다.

 

틀린 부분이나 질문이 있으시면 댓글로 남겨주세요!

 

감사합니다 :)

 

 

 

728x90
반응형
저작자표시 (새창열림)

'Python > Python 정리' 카테고리의 다른 글

[Python] zip() 이해  (0) 2022.04.28
[Python] enumerate 이해  (0) 2021.08.07
[Python] ID 함수 정리  (0) 2021.07.26
[Python] Lambda(람다) 표현식  (0) 2021.07.01
[Python] 자료형을 확인하는 isinstance()  (0) 2021.06.27
  1. self
  2. self의 위치 
'Python/Python 정리' 카테고리의 다른 글
  • [Python] zip() 이해
  • [Python] enumerate 이해
  • [Python] ID 함수 정리
  • [Python] Lambda(람다) 표현식
우준세
우준세
준세 단칸방우준세 님의 블로그입니다.
반응형
우준세
준세 단칸방
우준세
전체
오늘
어제
  • 분류 전체보기 (180)
    • Python (75)
      • Python 정리 (30)
      • 백준 알고리즘 (45)
    • C# (48)
      • Winform (12)
    • C & C++ (5)
      • C++ (1)
    • 영상처리 (17)
    • JAVA (11)
      • 코딩자율학습-스프링부트 (11)
    • AI (11)
      • DL (4)
      • Pytorch (5)
      • GAN (2)
    • Computer Science (3)
      • Algorithm (3)
    • Project (7)
    • 책 리뷰 (1)

블로그 메뉴

  • 글쓰기
  • 관리자

인기 글

태그

  • C# ContinueWith
  • 백준
  • 코딩자율학습
  • opencv
  • c#
  • C# 이벤트 프로그래밍
  • C# deadlock
  • C# 비동기
  • C# Evnet
  • 파이썬
  • Python
  • 알고리즘
  • pytorch
  • C# event
  • 자바
  • python opencv
  • 스프링부트
  • 백준 파이썬
  • c# 정규표현식
  • C# Monitor
  • c언어
  • C# Task 메서드
  • C# 비동기 프로그래밍
  • 이벤트 기반 프로그래밍
  • pytorch tensor
  • C# dataGridView
  • c# 비동기프로그래밍
  • Winform DataGridView
  • pytorch tutorial
  • opencv 객체 추적

최근 댓글

최근 글

우준세
[Python] self 이해
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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