파이썬에서 함수 첫번째 매개변수로 들어가는 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 |
파이썬에서 함수 첫번째 매개변수로 들어가는 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 |