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 [EMAIL PROTECTED] "In the fields of hell where the grass grows high Are the graves of dreams allowed to die." -- Richard Harter -- http://mail.python.org/mailman/listinfo/python-list