편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2018.04.11

    파이썬에서 클래스변수가 계속 초기화 되는 이유가 궁금합니다.


    class Stack:
    
        def __init__(self):
            self.items = []
    
        def __len__(self):
            return len(self.items)
    
        def is_empty(self):
            return len(self.items) == 0
    
        def push(self,e):
            self.items.append(e)
    
        def pop(self):
            if self.is_empty():
                raise Exception('Stack is empty')
            else:
                return self.items.pop()
    
        def top(self):
            if self.is_empty():
                raise Exception('Stack is empty')
            else:
                return self.items[-1]
    
    
    valStack = Stack()
    opStack = Stack()
    
    def repeatOps(refOp):
        while ( len(valStack) > 1 or prec(refOp) <= prec(opStack.top()) ) :
            doOP()
    
    def EvalExp( exp ):
        for e in exp:
            if e in '0123456789':
                valStack.push(e)
            else:
                if opStack.is_empty():
                    opStack.push(e)
                else:
                    repeatOps(e)
                    opStack.push(e)
        repeatOps('+')
        print(valStack.top())
    

    스택을 나타내는 클래스를 만들고 이것으로 전역 변수로 설정 함수에서 사용하는데 계속 초기화가 됩니다.

    위의 소스가 일부분입니다. EvalExp 함수에서는 제대로 스택변수에 잘 쌓이는데 repeatOps함수의 opStack.top()에서 계속 스택이 비어있다고 뜹니다.

    제가 객체지향이 처음이라 잘 모르는 건지는 모르겠는데 전역변수로 설정을 해도 불러 올때마다 초기화를 시키는 것이라 그런건지 잘 모르겠습니다. 어떻게 하면 초기화가 안되는지 궁금합니다.

    위 코드는 스택을 이용한 계산기입니다.