Wrapping float

S

Sybren Stuvel

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.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?

Thanks in advance,
Sybren
 
B

Bengt Richter

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.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?
Float is an immutable, so you need to override __new__

Regards,
Bengt Richter
 
R

Robert Kern

Sybren said:
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.

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
(e-mail address removed)

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,599
Members
45,163
Latest member
Sasha15427
Top