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!