Python getter, setter

Python は 2.6 以降の property でゲッターセッターが使えるらしい。
IronPython 2.6 でも使えるのかな?両方で実験。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

class Engine(object):
    """
        over 2.6 property getter,setter test
    """
    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value
        print "(%s) get!" % value

    @name.getter
    def name(self):
        print "out"
        return "name as %s" % self._name

if __name__ == "__main__":
    # static test
    #Engine.name = "Toyota"
    #print Engine.name
    # instance test
    eg = Engine()
    eg.name = "Honda"
    print eg.name

getset

static でも property はアクセスできるけどセッターやゲッターは無視される。
オブジェクト生成を行ったのであれば普通にセッターやゲッターとして使える。
IronPython でも 2.6 なら有効なのが嬉しいですね、まだ 2.6 はベータですが。

getter は書かなくても良い、普通は setter 時に何か event を起こすのに使うものですし。
C# と違い実体は書く必要は無いようです、しかしイマイチ解りにくい書き方ですよね。

これを利用して IronPython で ObservableCollection を作って ListView を…
とやっているんだけーが上手くいかないのでまたこんど。
PropertyChanged は IronPython ではどう書けばいい???

第2章 ListView 1/1 – 続・ひよ子のきもち

こんな強烈な IronPython 屋さんが日本にいたんだ。
今まで検索に引っかからなかったのは何故だろう、探し方が悪いのか?
とにかく参考にさせてもらおう、メモメモ。

Enjoy!

more WPF

Planet Python

私の blog はおもくそ日本語なのにまた見つけられちゃった。
IronPython でこんなことをやっているのは世界中で私しかいないからだろうけど。
本当はスパム対策で日本から以外のアクセスは遮断したいんですけど。

mojibake

しかし日本からのアクセスだと utf-8 でも化けてリンク先にアクセスできないんですね。
Error 404 – Not Found になってしまう、多分英語圏でないところは全部ダメだと思う。

今後タイトルくらいは英語にしておいたほうがよさそう、日本人が到達できないのでは困る。
ロクな語学力が無いけどソースコードのコメントもなるべく英語にするべぇ、それで十分だろう。
今回から練習、ありがちな Enjoy! というサフィックスも無意味に入れて。

しかし世界中探しても WindowsForm ばかり…

次期Visual Studio 2010と.NET Framework 4.0の新機能 ? @IT

Visual Studio 2010 は UI が WPF 製になるんだ、もはや完全なる .NET Framework の世界。
開発環境本体が WPF で WindowsForm を使う人はまずいないだろう。
WindowsForm って Windows SDK の単なるラッパーですよ、既に過去の遺物。
みんな早々に WPF に移行しませう、IronPython で(それはもしや私だけ…

WPF = 豪華なグラフィックス

な偏見はそろそろヤメようよ、この記事を書いた人もそれっぽいし。
PyGtk みたく普通の GUI 部品として使ってはいけないなんて MS も言っていないわけで。
GTK+ なり Swing なりを知っている人ならもっと WPF のレイアウトに興味を持とう、楽しいよ。

だいいち VirtualBox のゲストで動かす人もいるんだからエフェクトに凝られても困る。
グラフィック関係は味付け程度に考えればいいと思う。

でも Windows 7 に .NET Framework 4.0 が入り DLR が標準ならもう VS は不要のような…
IronPython 等が流行するならだけど、フリーな XAML デザイナが今後出てくるような気が。
MS は VS より .NET Framework を広めたいはずだから自社で出す戦略もアリ。

既に VC++ は API の追加によるヘッダの提供くらいしかやることが無いだろう。
WPF の開発が可能になった VS 2008 の時と比べてかなーり製品として魅力が薄い感じ。
IDE の親切機能自体は強化されているだろうし C# 4.0 がやりたい人にはいいかも。

*****

ついでに、 Ubuntu の PrintScreen でマウスカーソルは全部矢印になると解った。
書くまでもなく上の画像を撮影した時はリンクを示す手のカーソルになっていたのにこうなった。
マウスカーソルは本当は画像化できないので書き足しているというのがよく理解できます。

Windows のネタなのに全部ホストの Ubuntu + gedit でネタを作っている私であった。

Enjoy!

.NET framework ゴミ箱

ファイルをごみ箱に削除する – IronPython

こんな方法があったのか。
てかそれって static なんだからインスタンスは作成しなくてもいいんだけど。

# -*- coding: UTF-8 -*-

import clr

clr.AddReferenceByPartialName("PresentationCore")
clr.AddReferenceByPartialName("PresentationFramework")
clr.AddReferenceByPartialName("WindowsBase")
# namespace Microsoft は PresentationCore にあるけど…
clr.AddReference("Microsoft.VisualBasic")

from System import *
from System.Windows import *
from Microsoft.VisualBasic.FileIO import *

class SendToRecycleBin(Window):
    """
        ファイルをドロップするとゴミ箱へ移動させる WPF Window
    """
    def __init__(self):
        self.Width = 320
        self.Height = 240
        self.Title = "SendToRecycleBin"
        self.AllowDrop = True
        self.Drop += self.on_drop

    def on_drop(self, sender, e):
        files = e.Data.GetData(DataFormats.FileDrop)
        for file in files:
            FileSystem.DeleteFile(  file,
                                    UIOption.OnlyErrorDialogs,
                                    RecycleOption.SendToRecycleBin )

if __name__ == "__main__":
    a = Application()
    a.Run(SendToRecycleBin())

つまりこれでいい。
しかし何故その名前空間なんだ?意味不明だし今までみつからないわけだ。
普通なら

.NET framework ゴミ箱

なんてなキーワードで探すもん。
他の言語ではできないしみたいじゃん。
○B 屋って必ず「○B で」って書くからね。

しかし Microsoft 名前空間といえば

import Microsoft

def on_open(sender, e):
    dlg = Microsoft.Win32.OpenFileDialog()
    if dlg.ShowDialog(self):
        MessageBox.Show("push ok")

openfiledlg7

と、せっかく用意した機能なのに… PresentationFramework.dll 内にあるというのに…
フックがあるので仕様により古いダイアログになるという Microsoft 側の大失敗があるし。
しかもフックを排除する方法が無い、Windows 7 でコレはないだろう。
のイメージがあって利用する気にもならんかった。

.NET Framework クラス ライブラリ

○B だけやたら豊富に揃っているね、どうしてもこの言語を残したいらしい。
ま、利用できるモンは利用すればいいだけさ。

参考までに以前書いた Linux (GNOME 限定)でのやりかた
ぱぇぽぃ2 ? Blog Archive ? g_file_trash ってのがあった

スパム対策がメンドいぞ

現在ココは凄い勢いでスパム攻撃を受けているんですが…
よくある 2 個以上のリンクを含むコメントは承認待ちになるようにしているんですけど…

おーい、Wordpress 2.7.1 は <b> タグで囲むとソレを認識しねぇのかよ!

他の方法で止めたけど。

DLR は Silverlight に同梱でした

IronPython が Windows 7 RC で使っていて妙に遅い原因が判明した。
Silverlight をインストールしていなかったからだ。
というか Silverlight に含まれている DLR がインストールされていなかったというわけ。

Windows 7 RC には初期状態で DLR が入っていると思い込んでいたよ。
.NET Framework 4.0 の目玉の一つなはずだから多分正式版には存在…
Silverlight はいらないんだけど単体な DLR をインストールするのも…ついでに。

仮想で動かしている Windows で Silverlight を動かすなんて厳しすぎ。
それより Opera では動かないので今までダイアログが出ても拒否していたわけです。

マイクロソフト – ホーム

に IE で行くと下記ダイアログがでる、もちろん Opera じゃ無理。
「インストール」ボタンを押してただひたすら指示に従う、再起動は不要。

silver

それだけで今までの激遅 ipy.exe がウソみたく快適に、バカみたいに早い!
でも初期化はやっぱり遅い、これだけはあきらめるしかない。

IronPython ではインタラクティブシェルはあんまり使わないわけですが。
Linux で Python は dir() と pydoc を使いまくるので bash は必須ですけど。
IronPython じゃ pydoc は無いし、それより MSDN を見たほうがわかり安い。