O
Odalrick
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
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