Proper usage of properties in 2.2

Sandy Norton sandskyfly at hotmail.com
Thu Nov 22 08:35:30 EST 2001


Hi,

I've been playing round with properties in 2.2b2 and I'm having a bit
of trouble understanding what I _shouldn't_ be doing when I use them.
For example this simple code doesn't work:

Python 2.2b2 (#26, Nov 16 2001, 11:44:11) [MSC 32 bit (Intel)] on
win32
Type "copyright", "credits" or "license" for more information.
IDLE 0.8 -- press F1 for help
>>> Example #1
>>> class Room:
	def __init__(self, width, length, fixed='length'):
		self.width = width
		self.length = length
		self.fixed = fixed
	def get_area(self):
		area = self.width * self.length
		return area
	def set_area(self, area):
		if self.fixed == 'length':
			self.width = area / self.length
		if self.fixed == 'width':
			self.length = area / self.width
	area = property(get_area, set_area, None, "Area of Room instance")

>>> r = Room(10.0, 30.0, fixed='width')
>>> r.area
300.0
>>> r.width
10.0
>>> r.length
30.0
>>> # So far so good. Now why doesn't this work?
>>> r.area = 500
>>> r.length 
30.0
>>> r.length = 500 / r.width # this should have happened
>>> r.length # giving this:
50.0

>>> # Example 2: another version that also doesn't work:
>>> class Room:
	def __init__(self, width, length, fixed='length'):
		self.width = width
		self.length = length
		self.fixed = fixed
		self.__area = None
	def get_area(self):
		self.__area = self.width * self.length
		return self.__area
	def set_area(self, area):
		self.__area = area
		if self.fixed == 'length':
			self.width = self.__area / self.length
		if self.fixed == 'width':
			self.length = self.__area / self.width
	area = property(get_area, set_area, None, "Area of Room instance")

>>> r = Room(10.0, 30.0, fixed='width')
>>> r.area = 500
>>> r.length
30.0

Now what am I doing wrong here? Is it that I'm not supposed to change
the value of another instance vars in a property set method? Do I have
to write property set/get methods for 'length' and for 'width' then?

Also another minor question: how does one get access to the doc string
of the property?

Thanks in advance,

Sandy



More information about the Python-list mailing list