I'm having some trouble with using property. This class is supposed to
represent a rectangle that can never be outside an area.

I'll snip the parts I don't think are relevant. Or should I? I dunno.

class ConstrainedBox:
        def __init__( self, size, ratio ):
#              Various instance variables initialized
                self.reset( size )

        def reset( self, size ):
                self._width, self._height = size
                self._height_defining_dimension = self._width > self._height *
self.ratio
                make_log( ' _height_defining_dimension =' + str(
self._height_defining_dimension ) )
                if self._height_defining_dimension:
                        self._max_linear_size = self._height
# This, and the corresponding line in the else clause is what is
causing trouble.
# self.linear_size is, as far as I can tell, the property I define last
in the class
# If I replace it with _set_linear_size, which it is supposed to call,
everything works
                        self.linear_size = self._height
#
                else:
                        self._max_linear_size = self._width
                        self.linear_size = self._width
                self.center_box( self._width / 2, self._height / 2 )
# Lots of methods snipped
        def _set_linear_size( self, value ):
                if value >= self._min_linear_size:
                        if value <= self._max_linear_size:
                                self._linear_size = value
                        else:
                                self._linear_size = self._max_linear_size
                else:
                        self._linear_size = self._min_linear_size
                self._scale_box()
# Some more snippage
# The property that is causing grief
        linear_size = property( _get_linear_size, _set_linear_size )
        rectangle = property( _get_rectangle )
        centre = property( _get_centre, _set_centre )


By adding some logging I found out that _set_linear_size never is
called, so the rectangle remains the default size forever.

/Oldarick

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to