dullhikoのだるいブログ

殆ど日記のだるいブログ

つーわけで一つ。Pythonでの日本語について。

2005年08月14日 | Python
せっかくPythonカテゴリを作ったのでここでひとつ。
Pythonでの日本語は簡単で、まあ、ソースファイルのエンコードをキッチリ指示して、u指定をつけたりしとけばまあ問題は無い。
って、これはあくまで表示や文字列としての話。

ファイルの保存となると話が違ってくる。
デフォルトではasciiコーデックが強制指定されており
マルチバイト文字列を通そうとしても拒否されてしまう。

システムデフォルトのエンコーディングをいじる、ということも出来るそうだが
その手段はあまり美しくない。と個人的な好みではそう思う。いやコードはきれいになるけど汎用性がないじゃん、と。
そこでヘルプ見たりググッてさまざまなサイトを見させていただいた結果、こういう感じの結論に達した。

fp=open("hoge.txt","w")
fp.write(u"テスト".encode('UTF-8'))
fp.close()

とすれば、UTF-8で書かれたテキストが出来上がる。

unicode("テスト").encode('UTF-8')
でもいいのかもしれない。

この内容はNoboNoboさんの書かれたPython小技集を必死でググッて発見、参考にさせていただきました。他にも環境変数参照の小技とか、なかなか最高。
というわけで初トラックバックさせていただこうと思ったが、その方法がいまいちわからなかったので断念。

Pythonカテゴリを新設した

2005年08月14日 | Weblog
なんかPythonのことばかり書いている気がしたので、いっそのこととして独立させてみたりした。
しかし、今まで書いた分はどうするのか…修正はめんどくさいからしないな、とも思う。なんだかなあ。

PythonでC++のstatic変数のようなものを使うには

2005年08月14日 | プログラミング
たとえば、gtkでは
gtk.WINDOW_TOPLEVEL
などとして、定数のように使っている機能のことだ。

クラスオブジェクトが存在せずとも(言い方を変えれば、生成せずとも)、グローバルに参照できる変数。
ちょうど、C++で言うところのstaticメンバをpublicとして宣言したようなものだ。
これは、以下のようにする。

class Testclass:
    CLASSDATA=1

このようにすると、いきなり
Testclass.CLASSDATA
という記述でアクセスできる。
このクラスに書き換えハンドラ(__setattr__)を実装して全ての変数を書き換え不能にしてしまえば、完全に定数のように使用することも可能だ…?

…と、思っていたのだが。なんと、この方式の変数には__setattr__でのトラップは効かないようだ。これが効くのはあくまでインスタンスのメンバ変数にのみ、ということらしい。