전공/파이썬

파이썬 함수 self

2022. 1. 12. 22:35
728x90
반응형

파이썬에서 함수 첫번째 매개변수로 들어가는 self를 공부하면서 몇가지 의문점이 들었다.

self는 인스턴스 자신의 포인터를 말하는 것이라고 한다.

나는 앞의 포인터 의미를 찾지 않아보고 몇가지 간단한 실험을 해보았다.

 

class Point:
    def __init__(self, PosX, PosY):
        self.PosX = PosX
        self.PosY = PosY
    
    def SetPos(self, PosX, PosY):
        self.PosX = PosX
        self.PosY = PosY

    def SetPosX(self, PosX):
        self.PosX = PosX

    def SetPosY(self, PosY):
        self.PosY = PosY

    def Print(self):
        print(f"X : {self.PosX}, Y : {self.PosY}")
        
pt = Point(1.2, 1.2)
pt.Print()
# X : 1.2, Y : 1.2

pt.SetPos(2.4, 2.4)
pt.Print()
# X : 2.4, Y : 2.4

pt.SetPosX(1.2)
pt.SetPosY(3.6)
pt.Print()
# X : 1.2, Y : 3.6

Set 값 그대로 나온다.

 

class Point:
    PosX = 0 	 	#클래스 변수 추가
    PosY = 0  		#클래스 변수 추가
    def __init__(self, PosX, PosY):
        Point.PosX = PosX 	#class 변수로 변경
        Point.PosY = PosY 	#class 변수로 변경
    
    def SetPos(self, PosX, PosY):
        self.PosX = PosX
        self.PosY = PosY

    def SetPosX(self, PosX):
        self.PosX = PosX

    def SetPosY(self, PosY):
        self.PosY = PosY

    def Print(self):
        print(f"X : {self.PosX}, Y : {self.PosY}")


pt = Point(1.2, 1.2)
pt.Print()
# X : 0, Y : 0

pt.SetPos(2.4, 2.4)
pt.Print()
# X : 2.4, Y : 2.4

pt.SetPosX(1.2)
pt.SetPosY(3.6)
pt.Print()
# X : 1.2, Y : 3.6

생성자에서 PosX, PosY(1.2, 1.2)를 대입하였지만 self.PosX와 self.PosY는 0으로 출력된다.

생성자에 있는 PosX, PosY는 클래스변수(인스턴스끼리 공유 가능)로 인식되는 것 같다.

self 변수는 인스턴스 개인의 값. 클래스 변수는 인스턴스끼리 공유가 되는 값.

 

PosX = 1	#전역 변수 추가
PosY = 1	#전역 변수 추가

class Point:
    PosX = 0 
    PosY = 0
    def __init__(self, PosX, PosY):
        PosX = PosX
        PosY = PosY
    
    def SetPos(self, PosX, PosY):
        self.PosX = PosX
        self.PosY = PosY

    def SetPosX(self, PosX):
        self.PosX = PosX

    def SetPosY(self, PosY):
        self.PosY = PosY

    def Print(self):	#Print self 제거
        print(PosX, PosY)

pt = Point(1.2, 1.2)
pt.Print()
# 1 1

pt.SetPos(2.4, 2.4)
pt.Print()
# 1 1

pt.SetPosX(1.2)
pt.SetPosY(3.6)
pt.Print()
# 1 1

전역변수 PosX, PosY를 선언 후 Point에서 출력하도록 만들었다.

모두 전역변수 (1,1)을 출력한다.

Class내의 변수를 사용하려면 self.변수, Point.변수 이런식으로 꼭 사용을 해야 되는 것 같다.

self나 Point가 붙지 않으면 전역 변수값으로 인식하는 것 같다.

 

Point Class안의 self.PosX는 pt 인스턴스 생성 후

self -> pt로 되어 pt.PosX 라고 봐야 하는 것 같다.

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'전공 > 파이썬' 카테고리의 다른 글

주피터 저장경로 변경하기  (0) 2020.09.01
주피터 노트북 크롬으로 설정하기  (0) 2020.09.01
'전공/파이썬' 카테고리의 다른 글
  • 주피터 저장경로 변경하기
  • 주피터 노트북 크롬으로 설정하기
참새는 귀여워
참새는 귀여워
여러 정보들을 공유합시다!
HAPPY여러 정보들을 공유합시다!
반응형
참새는 귀여워
HAPPY
참새는 귀여워
전체
오늘
어제
  • 분류 전체보기
    • 전공
      • R프로그래밍
      • 자바
      • 하둡
      • 백준 알고리즘 공부
      • 파이썬
      • C
      • C++
    • ☆일상
      • 어쩌다 쓰는 일기 및 나의 주장
      • 어쩌다 가는 음식집
      • 어쩌다 쓰는 물건들
      • 어쩌다 골프
      • 어쩌다 쓰는 책 후기
      • 수학
    • ★게임
      • 포켓몬스터(예전 글)
    • ○유용한 자료들

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 하둡 설치
  • BIG 오메가
  • C
  • C++ 전처리 지시자
  • 네임 스페이스
  • 자바
  • 하둡
  • R프로그래밍
  • 포켓몬스터dp
  • centos
  • 복권 5등 당첨금 지급
  • bool형
  • 인터넷복권5등당첨금
  • virtual box
  • BIG 세타
  • C 열거형
  • I/O 스트림
  • R프로그래밍 기초
  • 포켓몬스터 dp
  • 기본 정의
  • R 프로그래밍 기초
  • 복권5등 당첨
  • C언어
  • 함수 선언할 때 매개변수 없으면 어떤 의미인가여?
  • 복권 5등 당첨 수령 방법
  • C기본 자료형
  • Jupyter Notebook
  • C기초
  • c++ 리터럴
  • print()함수

최근 댓글

최근 글

hELLO · Designed By 정상우.
참새는 귀여워
파이썬 함수 self
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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