私はおそらくいくつかの基本的な間違いを犯しています...
オブジェクトのプロパティを初期化して確認すると、問題ありません。しかし、設定しようとしても、オブジェクト自体は更新されません。設定して取得できるプロパティを定義しようとしています。面白いことに、この長方形は幅の代わりに幅の2倍を格納するため、ゲッターとセッターはコピーするだけでなく、何かすることがあります。
class Rect:
"""simple rectangle (size only) which remembers double its w,h
as demo of properties
"""
def __init__(self, name, w):
self.name=name
self.dwidth=2*w
def dump(self):
print "dwidth = %f" % (self.dwidth,)
def _width(self):
return self.dwidth/2.0
def _setwidth(self,w):
print "setting w=", w
self.dwidth=2*w
print "now have .dwidth=", self.dwidth
width =property(fget=_width, fset=_setwidth)
.dwidthメンバー変数は通常プライベートですが、インタラクティブセッションで簡単に確認したいと思います。Pythonコマンドラインで試してみます。
bash 0=> python
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from rectzzz import *
>>> a = Rect("ack", 10.0)
>>> a.dump()
dwidth = 20.000000
>>> a.width
10.0
>>> a.width=100
>>> a.width
100
>>> a.dump()
dwidth = 20.000000
>>> a.dwidth
20.0
>>>
.widthが更新されているように見えるのに、dump()と.dwidthで示されるオブジェクトの実際の状態は変わらないのはなぜですか?「settingw=」の後に数字が表示されない理由は特に困惑しています。