Pythonのクラス

Pythonでクラスを作っていて、クラス変数が恐ろしいことに気づいた。

例えば、以下のようなクラスを作ってみる。

class Hoge:
    def __init__(self):
        self.a = 1
    def foo(self):
        self.b = 2

これのインスタンスを作ると、aやbの読み書きができるのは理解できる。

>>> hoge = Hoge()
>>> hoge.a
1
>>> hoge.b
AttributeError: Hoge instance has no attribute 'b'
>>> hoge.foo()
>>> hoge.b
2

このあと、hoge.aやhoge.bを書き換えられるのも(ややセキュアではないが)分からなくはない。問題はこの後だ。

>>> hoge.c = 3
>>> hoge.c
3

クラスを定義した時には作っていなかった変数であるcをいとも簡単に追加でき、読み書き可能なのである。「便利じゃん」という意見もあるだろうが、何かしら代入するときに変数名を打ち間違えても(上のコードではbと間違えてcと打った時)、エラーも出さずに進んでしまうという恐怖

さらに問題はこのあとで、

>>> hoge.foo = 4
>>> hoge.foo
4
>>> hoge.foo()
TypeError: 'int' object is not callable

お分かりいただけるだろうか、クラス内で定義されていた関数名と同じ名前の変数を定義でき、あろうことか上書きしてしまった。上書き自由にもほどがある

以上のコードはUbuntu11.10上のPython 2.7.1での動作だが、Python 3系列ではどうなっているのか大変気になる。

ちなみにRubyでは、クラス内の変数にアクセするためにはattr_accessorやattr_readerに登録しなければならないので上記のようなことは起こり得ないし、関数を変数で上書きするなんてこともできない。

追記

Python3.2で試しても同じ結果でした。どういう思想でこうなっているんだろう?

パソコンを買い換える

自宅ではiMac Early 2009を使っていて、6月に新型が出ることを期待していた。CPUやRetina Displayはどうでもよく、USB3.0が内蔵されるだろうことを期待していた。

ところが更新はなく、デスクトップ型ではMac Proの更新(これはIntelから供給可能なXeonが更新されただけ)にとどまってしまった。そこでMacBook系を見てみたが、最近の用途である写真の管理、編集のためにSSDにすると、Retinaモデルの方がお買い得という結論。Airはさすがに遅かろうということで却下。しかし、Retinaモデルはアプリケーションの対応が必須であることや、スクロールが遅いなど、Appleの初物らしい試験機仕様。

悩んだ末、Macである必要も特にないことから、Windowsでデスクトップを組むことにした。Intelは高い、ビデオは内蔵の方が(消費電力的に)良い、などの要望を考慮した結果は以下の通り。

 

M/B ASUS F1A75-I Deluxe
CPU AMD A8-3870K (3.0GHz)
RAM Century DDR3-1600 (ELPIDA) 8GB x 2
SSD Intel 330 180GB
HDD Seagate Barracuda 7200.14 2TB x 2
Case JMAX JX-FX400B

 

これにディスプレイ HP ZR2740wとWindows 7 Professional (64bit)を加えて、だいたい14万円。組み立てるどころか、まだ届いてもいないが、不満のない性能を発揮してくれることを祈るばかり。

IO-DATA HDL-A2.0購入

これまで使っていたLink Station mini(LS-WSX1.0TL/R1)がファームウェアエラーとか何とかで起動しなくなってしまった。省電力+小型という以外は、発熱にも性能的にも良いと言えなかった.いくつかの候補があったが、価格と性能でHDL-A2.0にした。プレミアムアウトレットでクーポン込みで15,980円と、それなりの価格で購入。

IMGP8049.jpgアウトレットだとこんな包装状態で届く。まぁ本体が無事なら良い。IMGP8034.jpgしかし開封された様子もなく、どういう理由でアウトレット扱いになったのかはよく分からない。IMGP8035.jpg中身も未使用状態だった。IMGP8039.jpg本体の性能としては、静音性が高く、動作も安定しており、特に不満はない。Buffaloの管理画面よりレスポンスが良い気がする。

humming bird

仙台でよく行く店の一つがhumming birdというイタリア料理のお店。よく行くのが一番町店で、メニューが多彩なことに加えて、静かすぎず騒がしすぎない雰囲気が良い。

IMGP7902.jpg

ジャガイモのフリットを使ったサラダ。味付けに半熟卵が使われていて、まろやかになっている。
IMGP7911.jpg

次が夏の期間限定メニューで、ミディトマトとアボガドの冷製トマトスパゲッティ。これ以外に冷製のカルボナーラもある。IMGP7917.jpg

最後が自家製トマトジャムのクレープ。トマトジャム?!と思い頼んでみた。トマトを煮詰めただけかと思いきや、トマトの酸味や風味を残したまま少し甘くしてあり、不思議な味。中のジェラートはオレンジで、トマトとは違う酸味、甘みと合わさってさらに不思議な味だった。美味しいと思ったが、人によってはイマイチかもしれない。ここは他にも野菜を使ったデザートがいくつかあるのも面白い。

藤田喬平ガラス美術館

4月29日に松島に遊びに行き、藤田喬平ガラス美術館を見てきた。松島駅からも松島海岸駅からも少し遠いが、松島観光の際にお勧め。ちなみに駐車場は松島一の坊と共用のため非常に広い。

以 前にも行ったことがあり、今回が2回目。この美術館の良い点の一つが、写真撮影可能というところ。部分的に禁止という場所もない。前回はPentax *istDにSigma 30mmで行ったので、高感度では撮れずに苦労したが、今回はK-5にTamron 90mmという体制。

IMGP6755.jpg多くの作品にガラスとは思えない細工が施されている。見ていると圧倒される。

IMGP6758.jpg

「湖上の花」1995年。金箔が施された作品も多く、また形状も独特なため、やはりガラスとは思えない作品ばかり。特にこの青さはお気に入り。

IMGP6768.jpgIMGP6770.jpg金箔の細工はかなり難しいらしい。ビデオで藤田喬平氏の制作の様子が見られるが、金箔を貼り付けていく作業のダイナミックさに圧倒される。

IMGP6785.jpg「かぐや姫」1995年金箔の模様が実に鮮やか。

IMGP6798.jpgIMGP6818.jpgもちろんガラスらしい透明感の高い作品もある。どうやって作っているのか全く想像できない。

IMGP6835.jpgIMGP6829.jpg広い庭園もあり、チャペルもある。中には入れないが、ステンドグラスがすばらしい。

IMGP6839.jpgちょうど桜も満開だった。

IMGP6841.jpgいろいろな方の作品が販売されていて、ガラスの竜は細工、内側に施された色など、すごいの一言。

IMGP6849.jpgIMGP6843.jpgショップだけでもかなり楽しめる。その時期に合わせた作品も多くておもしろい。

 

春の花

三十三観音堂巡りの途中で、道端の春の花を撮ってみた。Pentax K-5にTamronの90mmマクロ。

蔓日々草(ツルニチニチソウ)道端にたくさん咲いていた。回り出しそうな形と、鮮やかな紫が良い。蔓日々草スズランかと思っていたら、スズランズイセン(スノーフレークとも)という別種。花弁の先に緑の斑点があるのが特徴だそうな。これもそこら中に咲いていた。スズランズイセン

仙台の三十三観音堂巡り

三十三観音堂巡りというのは全国にいろいろな種類のものがあるらしいが、仙台にもあるというので始めてみた。簡単に言えば御朱印帖を手に入れてのスタンプラリー。

まずは第一番で、法楽院。東北大の川内キャンパスから少し西に行ったところ。阿部酒店やさわきがあるあたりにある。御朱印帖は阿部酒店で販売しているが、残り一冊だった。それで、御朱印はご近所の方が保管されているそうで、阿部酒店の方に案内していただき、押してもらう。その方が不在だと対応できないので、何回か訪問される方も多いらしい。順番を無視して進めることもできそうだが、一番から飛ばすのはちょっと残念なので、在宅時に伺えてラッキーだった。

IMGP6872.jpgIMGP6875.jpgIMGP6873.jpg