pythonでデフォルト型の演算を定義し直す
投稿日: 2013/01/24 カテゴリー: programing, python, 全投稿 | Tags: クラス, 特殊メソッド, programing, python, 再定義, 書き換え コメントするクラスに定義されてる特殊メソッドの
__add__(+)
__sub__(-)
__mul__(*)
__div__(/)
を書き換えると、そのクラスから生成されたオブジェクトがこの演算子を使った時に定義した計算を行なってくれるようになる。
【参考】
有限体上なんかでの計算は足し算なのにmodをとったりするので使うかもしれない。
例えばlistの足し算は前のリストに後ろのリストの要素を追加するが、
>>> a = [1,2,3] >>> b = [4,5,6] >>> a+b [1, 2, 3, 4, 5, 6]
listクラスを継承しつつ、クラス内の__add__を書き換えてやると
>>> class list(list): ... def __add__(self, x): ... return x ... >>> a+b [1, 2, 3, 4, 5, 6]
あれっ
……
いろいろやった結果
>>> a = list([1,2,3]) >>> b = [4,5,6] >>> a+b [4, 5, 6]
こんな感じで定義できるようになった。
で、わざわざ同じ名前で書き換えたけどtypeをみてみると実際には別の名前でクラスが定義されてるっぽい。
最初のコードでtype(a)をすると
>>> type(a) <type 'list'>
と表示されるのに、
最後のコードでtype(a)をすると
>>> type(a) <class '__main__.list'>
と表示される。
上書きが出来ればa = list()ってやらないで、a = []ってやっても再定義したほうのクラスが生成はずで、
どうしてもその動作をさせたいんだけどどうしたらいいのかわからない…
多分[ ]クラス的なのを書き換えればいいんだろうけど[ ]ってなんだ…