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

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()에서 계속 스택이 비어있다고 뜹니다.

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

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

1답변

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.