파이썬에서의 메소드

조회수 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 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    질문자가 질문하는 내용은 줄 몇줄로 설명할 내용은 아닙니다.

    물론 딱 답만 적는다면 루틴을 공유한다가 맞고 변수등은 별도로 사용하는 것이죠.

    리버스 엔니지어링을 학습해보실것을 권합니다. 어차피 모든 프로그램은 바이너리코드(어셈블리어)가 됩니다.

    어셈블리어에서 함수를 호출시 스택에 파라미터를 입력하고 call opcode 를 호출할 때 리턴어드레스가 스택에 push 되고 스택프레임이 만들어는 과정을 이해하면 지역변수 self 혹은 this 등의 사용이유 등을 이해할 수 있습니다.

    고급언어는 컴퓨터를 위한 환경이 아닙니다 어셈블리어를 학습해볼 것을 권합니다.

    • 쌩큐 ^0^ dbwodlf3 2017.5.16 10:06
    • 아직도 의문은 풀리지는 않았지만... 이제서야 답변에 공감하고 이해가 되네용... activation record.. 어찌고저찌고.. 웹에서는 잘 안보이네요. 리버싱 엔지니어링 책을 읽어봐야겠어요. (읽고 있기는 하지만...) 공부해야할게 많아서 그런지 ㅠㅜㅜ dbwodlf3 2017.10.16 18:47

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)