CalculatorEngineクラスを次のように再利用してRPN計算機を取得しようとしています。しかし、私がそれを実行すると、属性エラーが表示されます。 'RPNCalculator'オブジェクトには属性 'dataStack'がありません。これをどうすれば解決できますか? (あまりにも多くのコードがあるだろうと私はStackクラスが含まれていませんでした。)Python:RPN Calculator
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!'
残りのコードはどこにありますか(インスタンスの作成と操作、そしてもちろん例外を生成する行)?また、インデントを固定します。 – CristiFati
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – jdv