2008年11月19日水曜日

metaclassでpropertyを使う。

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
気持ち悪い。

usual = UsualWayOfUse()
usual.x = 1
print usual.x

print '=' * 60

class KlassPropertyMeta(type):
def fgetx(self):
base = self.__base__
if base != object:
return base.fgetx() + self._x
return self._x
x = property(fgetx, None, None)

class KlassProperty(object):
__metaclass__ = KlassPropertyMeta
_x = 1

class DerivedKlassProperty(KlassProperty):
_x = 2

print KlassProperty.x
print DerivedKlassProperty.x

kp = KlassProperty()
dkp = DerivedKlassProperty()
print kp
print dkp


実行結果

[nori@asama]~/Desktop/study/python/experiment% python classproperty.py
1
============================================================
1
3
<__main__.KlassProperty object at 0x2aaaaab48e50>
<__main__.DerivedKlassProperty object at 0x2aaaaab48e90>

0 件のコメント: