Pythonのインクリメント
なぜPythonには「i++」ってできないの?
他の多くの言語ではインクリメント、デクリメントは「i++」「i--」とかってすればいいのに〜
>>> i += 1 >>> i -= 1
何だか面倒だ。これはPythonが完全なオブジェクト指向の言語だからなの?と言う事で、
>>> type(1) <type 'int'> >>> dir(1) ['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delat tr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__getat tribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '_ _int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__' , '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__ ', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr __', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow_ _', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__seta ttr__', '__str__', '__sub__', '__truediv__', '__xor__']
おおお〜凄いね〜数値にもちゃんと属性があるじゃないですか〜「+」ってのは「__add__」が対応しているのかな、こういったのをフックメソッドと言うと聞いた事がある。うまいことやれば「++」に対応した「__inc__」なんてのも作れるんでないの?残念ながら今の私ではわからんけどね。その内きっと・・・
Javaなんかは、完全なるオブジェクト指向じゃないから数値自身は自分が何者かを知らない。だから数値をラッピングするクラスがあるんじゃなかったけ?いや忘れたけどね。
>>> callable(getattr(1, "__add__")) True >>> 1.__add__(1) File "<stdin>", line 1 1.__add__(1) ^ SyntaxError: invalid syntax
残念。できると思ったんだが無理なんだ。なんで?まあ〜のんびりやろう。