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 = []ってやっても再定義したほうのクラスが生成はずで、
どうしてもその動作をさせたいんだけどどうしたらいいのかわからない…
多分[ ]クラス的なのを書き換えればいいんだろうけど[ ]ってなんだ…

広告


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中