Wrapping float

Robert Kern rkern at ucsd.edu
Sat Sep 17 06:29:29 EDT 2005


Sybren Stuvel wrote:
> Hi all,
> 
> I'm trying to make a float-like class (preferably a subclass of
> 'float') that wraps around. The background: I'm modeling a
> multi-dimensional space, and some of those dimensions are circular.
> 
> Here is my code so far:
> 
> class WrapFloat(float):
>     def __init__(self, value, wrap = None):
>         float.__init__(self, value)
>         self.wrap = wrap
> 
> The problem is this:
> 
> Python 2.4.1 (#2, Mar 30 2005, 21:51:10) 
> [GCC 3.3.5 (Debian 1:3.3.5-8ubuntu2)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> 
>>>>from engine.geometry import WrapFloat
>>>>WrapFloat(45)
> 
> 45.0
> 
>>>>WrapFloat(45, 3)
> 
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> TypeError: float() takes at most 1 argument (2 given)
> 
> So my question to you is: how can I change my code so I can pass two
> values to the WrapFloat constructor?

You also have to override __new__ I think. It automatically gets passed
the arguments to __init__. C.f.
http://www.python.org/2.2/descrintro.html#__new__

In [11]: class WrapFloat(float):
   ....:     def __new__(cls, value, *args, **kwds):
   ....:         return float.__new__(cls, value)
   ....:     def __init__(self, value, wrap=None):
   ....:         float.__init__(self, value)
   ....:         self.wrap = wrap
   ....:

In [12]: x = WrapFloat(45, 3)

In [13]: x
Out[13]: 45.0

In [14]: x.wrap
Out[14]: 3

-- 
Robert Kern
rkern at ucsd.edu

"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
  -- Richard Harter




More information about the Python-list mailing list