Subclassing int
Steve Holden
steve at holdenweb.com
Mon Jul 23 21:16:58 EDT 2007
G wrote:
> Hi,
>
> I am trying to subclass int to allow a constructor to accept None. I
> am trying the following
>
> class INT(int):
> def __init__(self, x):
> if x is None:
> return None
> else:
> int.__init__(x)
>
> b = INT(x=None)
>
> When i run the previous code i get the following error:
> b = INT(x=None)
> TypeError: int() argument must be a string or a number, not 'NoneType'.
>
> Do you guys know why the if statement is not evaluated?
>
> Thanks for your help
>
Probably because you need to override the __new__() method rather than
the __init__() method:
>>> class INT(int):
... def __new__(cls, arg=0):
... if arg is None:
... return None
... else:
... return int.__new__(cls, arg)
...
>>> n = INT(3.2)
>>> n
3
>>> n = INT("42")
>>> n
42
>>> n = INT(None)
>>> print n
None
>>>
regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC/Ltd http://www.holdenweb.com
Skype: holdenweb http://del.icio.us/steve.holden
--------------- Asciimercial ------------------
Get on the web: Blog, lens and tag the Internet
Many services currently offer free registration
----------- Thank You for Reading -------------
More information about the Python-list
mailing list