Python

2011年05月19日

ちょっと理由があって必要になったので。

オブジェクト指向言語においては、一度クラスを定義すると、そのクラスのインスタンスは複数生成できることが多い。
しかし場合によっては、クラスが持つインスタンスを一つに限定したい(「Singletonパターン」と呼ばれる)場合もある。

Pythonでもこれは可能と言えば可能なのだが、多くのサンプルコードは「クラスをSingletonになるように定義する」方法であるため、Singletonなクラスをいくつも利用する場合は不便だし、Singletonにするための定義を何度も書くのはDRYでない。
例えば

class MyClass(Singleton):
のように定義するだけでSingletonなクラスが定義できれば便利である。

でぐぐってみると、こんな記事が見つかった。

Pythonでシングルトンを実装するには? - Mixnuts@BetaNews

ただこの方法だと、例えば

class MyClass(Singleton):
    def __init__(self):
        # 初期化処理
        print "初期化してます"

のようにした場合に、

a = MyClass() # こっちで "初期化してます" が表示されるのはよいのだが
b = MyClass() # こっちでも "初期化してます" が表示されてしまう!インスタンスは1つなのに!

という問題があった。

一思案してみたのだが、Singletonクラスをどう定義しようとも、MyClassの初期化処理を「__init__」というメソッドにさせている限りは解決しないことが判明し、

class MyClass(Singleton):
    def singleton_init(self):
        # 初期化処理
        print "初期化してます"

というAPIにすることで解決した。コードはこちら↓



maraigue at 03:38コメント(1)トラックバック(0) 

2009年05月11日

勉強会にて

今回が第1回となる、Python札幌勉強会に参加してきた。
Pythonは普段使っていないものの、Pythonを通じてプログラミングにおける新しい話題に触れたかったこと、そして(私のよく出ている)Ruby札幌とは異なる方々と交流できる機会であることもあり、参加を決めた。

Pythonをまともに触ったのは勉強会2日前からで、Pythonは全くの素人である私だが、今回の勉強会における読書会やコードリーディングを通じて、Pythonの基本への取り掛かりとすることが出来たのは有意義だったと感じた。

終了後懇親会。ここで色々と激論(?)が発生。PythonとRuby・Perlの違いが一番興味深い点だった。
要約すれば「Pythonは読みやすい。Rubyとかは書きやすいかもしれないけど、読みやすいとは限らない。」というところだろうか。
私の正直な印象としては、コードそのものの読みやすさは間違いなくRuby>Pythonだと信じていた。ただ周りの方々曰く、「他人のRubyのコードを読むのは難しい」ということ。
よく考えてみると、Rubyの読みやすさは言語そのものに拠るものでなくて、人の力に拠るものなのかもしれない。たぶん、「読みやすくしようとすれば出来るけど、実際にはそうとも限らない」ということなのだろう。それに対してPythonは、言語自体が読みやすさを高めるよう設計されているのかもしれない。

なので、PythonはRubyなどよりも業務利用に適している、という結論であった。今回の懇親会は仕事でプログラムを書いてらっしゃる方が多かったこともあってか、(私の愛用している)Rubyが劣勢だったのは仕方ないこととはいえ面白くなかったけど(ぉ)、こういう話を通じてPythonの特質を知ることが出来た。

皆様またよろしくお願いします。

maraigue at 02:51コメント(0)トラックバック(0) 
livedoor プロフィール

H. Hiro

  • ライブドアブログ