Python.use(better) #Calculator: step01b -- class Calculator
‖記事一覧‖ Python.use(better)《Python3.1》《復刻版》
class Calculator
《著》森こねこ、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28
課題を作成する過程を通して「プログラミング」の理解を深めます。
※ Smalltalk-80 で作成した例題を、Python3.1 で再構成しました。
- Smalltalk a la carte #02, 電卓(デスクトップ), 1988, 1992, 1995.
class Calculator: def __init__(self): self.op = "" self.acc = 0 self.reset() def __repr__(self): return "%s %s"%( self.__class__.__name__, vars(self), ) def __str__(self): return "".join(self.reg) ## ---------------------------------------- def _changed(self): self._update() def _update(self): print(str(self)) ## ---------------------------------------- def reset(self): self.reg = [] def append(self, value): self.reg.append(value) self._changed() def eval(self): return eval(str(self)) def __call__(self, key): op = self.op op1 = self.acc op2 = self.eval() value = eval("%s %s %s"%(op1, op, op2)) if op else op2 self.op = key self.acc = value self.reset() return value ## ---------------------------------------- class Key: def __init__(self, calculator, value): self.calculator = calculator self.value = value def __repr__(self): return "%s(%r)"%( self.__class__.__name__, self.value, ) class NumKey(Key): def __call__(self): self.calculator.append(self.value) class OpKey(Key): def __call__(self): return self.calculator(self.value)
↑TOP