2017-10-11 144 views
0

我試圖通過重用CalculatorEngine類來獲得RPN計算器,如下所示。但是當我運行它時,它顯示一個屬性錯誤:'RPNCalculator'對象沒有屬性'dataStack'。我該如何解決這個問題? (我沒有包括Stack類,因爲想太多代碼。)Python:RPN計算器

 class CalculatorEngine(object): 
     def __init__(self): 
      self.dataStack = Stack() 

     def pushOperand(self, value): 
      self.dataStack.push(value) 

     def currentOperand(self): 
      return self.dataStack.top() 

     def performBinary(self, fun): 
      right = self.dataStack.pop() 
      left = self.dataStack.top() 
      self.dataStack.push(fun(left, right)) 

     def doAddition(self): 
      self.performBinary(lambda x, y: x + y) 

     def doSubtraction(self): 
      self.performBinary(lambda x, y: x - y) 

     def doMultiplication(self): 
      self.performBinary(lambda x, y: x * y) 

     def doDivision(self): 
      try: 
       self.performBinary(lambda x, y: x/y) 
      except ZeroDivisionError: 
       print("divide by 0!") 
       exit(1) 

     def doTextOp(self, op): 
      if (op == '+'): 
       self.doAddition() 
      elif (op == '-'): 
       self.doSubtraction() 
      elif (op == '*'): 
       self.doMultiplication() 
      elif (op == '/'): self.doDivision() 


    class RPNCalculator(CalculatorEngine): 
     def __init__(self): 
      super(CalculatorEngine, self).__init__() 

     def eval(self, line): 
      op = line.split(" ") 
      try: 
       for item in op: 
       if item in '+-*/': 
        self.doTextOp(item) 
       elif item in '%': 
        self.performBinary(lambda x, y: x % y) 
       else: 
        self.pushOperand(int(item)) 
       return self.currentOperand() 
      except ZeroDivisionError: 
       print 'divide by 0!' 
+0

代碼的其餘部分(實例創建和操作,當然還有生成異常的行)在哪裏?另外,修復縮進。 – CristiFati

+0

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv

回答

0

class X(object): 
 
    def __init__(self, name): 
 
    self._name = name 
 

 
    def doit(self, bar): 
 
    print("Hello") 
 

 
class Y(X): 
 
    def __init__(self): 
 
    # super(X, self).__init__() 
 
    X.__init__(self, "DDXX") 
 

 

 
i = X("Yuze") 
 
j = Y()

或者你可以用這個片段來解決它。

+0

是的,我做到了。我沒有添加代碼,因爲它不會允許我發佈:) – Tiffy

+0

這既不是答案,也不是正確的。 – CristiFati

+0

我明白了。我認爲這是因爲超類的使用。我建議使用這個鏈接的方法https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods –