__new__

http://www.josw.net/blog/?p=1051

Pythonでクラスを定義するとき__new__っていう特殊メソッド使えるんですが、これが便利です。

普通、クラス定義のときはコンストラクタとして__init__を使いますね。

この__init__はコンストラクタのため返り値の指定はできず、常にインスタンスオブジェクトを返すというのは当たり前の話ですね。

それに対し、__new__は返り値を返すことが出来るのです。

意味の無い例ですが、以下のような感じ。


>>> class TestSpecialName(object):
... def __new__(cls, arg_int):
... return arg_int ** 2
...
>>> TestSpecialName(4)
16
で、これを利用すると、関数を返すことも出来るんですね。

>>> def foo():
... return range(5)
...
>>> class Return_foo(object):
... def __new__(cls):
... return foo
...
>>> hoge = Return_foo()
>>> hoge

>>> hoge()
[0, 1, 2, 3, 4]
とりあえず今日はここまで。

近日中にこれを利用した便利かもしれないこと実験して投稿します。