파이썬에서의 메소드
조회수 1927회
안녕하세요.
파이썬으로 객체를 만들다 보면은, 좀 줄이 길어질 때가 있습니다. 줄이 이렇게나 긴데, 각 객체가 인스 턴스화 되었을 때.
그 각 개체들이 전부다 이렇게나 긴 줄의 소스코드를 가지고 있단말이야? 라는 염려가 들 떄가 있습니다.
class puzzle(object):
def __init__(self):
self.puzzle8 = [[1,2,3],[4,5,6],[7,8,0]]
def __getitem__(self,index):
return self.puzzle8.__getitem__(index)
def __setitem__(self,index,value):
return self.puzzle8.__setitem__(index,value)
def __str__(self):
return str(self.puzzle8)
def search(self,a):
for i in range(0,3):
for j in range(0,3):
if a == self.puzzle8[i][j] :
return (i,j)
def swap(self,a,b):
self.puzzle8[a[0]][a[1]], self.puzzle8[b[0]][b[1]] = self.puzzle8[b[0]][b[1]], self.puzzle8[a[0]][a[1]]
def left(self):
point = self.search(0)
if point[1] == 0 :
return 'impossible'
self.swap(point,(point[0],point[1]-1))
print(self.puzzle8)
def right(self):
point = self.search(0)
if point[1] == 3 :
return 'impossible'
self.swap(point,(point[0],point[1]+1))
print(self.puzzle8)
def up(self):
point = self.search(0)
if point[0] == 0 :
return 'impossible'
self.swap(point,(point[0]-1,point[1]))
print(self.puzzle8)
def down(self):
point = self.search(0)
if point[0] == 2 :
return 'impossible'
self.swap(point,(point[0]+1,point[1]))
print(self.puzzle8)
예를 들어서 위와같은 소스코드는 약 40줄입니다.. 제가 궁금한 것은, Class를 인스턴스화 시켰을 때 저 각각의 메소들도 그 각 매체마다 따로 인스턴스화 되는 것인가요. 아니면 그냥 평범한 함수와 같이 루틴을 하나 공유하는 식인가요? 그것이 궁금합니다.
정리하자면. 클래스가 인스턴스 될 때 단 한번만 메소드가 형성되고, 이후에는 형성된 메소드를 하나 공유하는가?
답변 해 주시면 감사하겠습니다._^
1 답변
-
질문자가 질문하는 내용은 줄 몇줄로 설명할 내용은 아닙니다.
물론 딱 답만 적는다면 루틴을 공유한다가 맞고 변수등은 별도로 사용하는 것이죠.
리버스 엔니지어링을 학습해보실것을 권합니다. 어차피 모든 프로그램은 바이너리코드(어셈블리어)가 됩니다.
어셈블리어에서 함수를 호출시 스택에 파라미터를 입력하고 call opcode 를 호출할 때 리턴어드레스가 스택에 push 되고 스택프레임이 만들어는 과정을 이해하면 지역변수 self 혹은 this 등의 사용이유 등을 이해할 수 있습니다.
고급언어는 컴퓨터를 위한 환경이 아닙니다 어셈블리어를 학습해볼 것을 권합니다.
댓글 입력