As it turns out, this has little to do with integers and the
operations you are trying to do on them. I'll explain in more detail.

Integers are immutable, which you may already know. This presents a
problem with subclassing them and using the usual special method
__init__, because the int object has already been created by this
point and can not change. Another special method, __new__, is called
passing the class object itself (foo, in this case) for the first
argument (traditionally named cls, instead of self). The return of
this should be an integer which will be the value of your new foo
int-subclass.

The following will do as you expected your own example to do.

class foo(int):
    def __new__(cls, value):
        return value & 0xF

assert foo(0x10) == 0  # Assertions are much better tests than prints :-)

On 1/15/07, Jim B. Wilson <[EMAIL PROTECTED]> wrote:
> Am I nuts? Or only profoundly confused? I expected the this little script
> to print "0":
>
> class foo(int):
>   def __init__(self, value):
>     self = value & 0xF
>
> print foo(0x10)
>
> Instead, it prints "16" (at least on python 2.4.4 (Linux) and 2.5 (Wine).
>
> Jim Wilson
> GNV, FL
> --
> http://mail.python.org/mailman/listinfo/python-list
>


-- 
Read my blog! I depend on your acceptance of my opinion! I am interesting!
http://ironfroggy-code.blogspot.com/
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to