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