On Jun 20, 8:24 pm, "Kenji Noguchi" <[EMAIL PROTECTED]> wrote: > Hi > > I'm using Python 2.4.4 on 32bit x86 Linux. I have a problem with printing > hex string for a value larger than 0x800000000 when the value is given to > % operator via an instance of a class with __int__(). If I pass a long value > to % operator it works just fine. > > Example1 -- pass a long value directly. this works.>>> x=0x80000000 > >>> x > 2147483648L > >>> type(x) > <type 'long'> > >>> "%08x" % x > > '80000000' > > Example2 -- pass an instance of a class with __int__()>>> class X: > > ... def __init__(self, v): > ... self.v = v > ... def __int__(self): > ... return self.v > ...>>> y = X(0x80000000) > >>> "%08x" % y > > Traceback (most recent call last): > File "<stdin>", line 1, in ? > TypeError: int argument required > > > > The behavior looks inconsistent. By the way __int__ actually > returned a long type value in the Example2. The "%08x" allows > either int or long in the Example1, however it accepts int only > in the Example2. Is this a bug or expected? > > by the way same thing happends on a 64bit system with a > value of 0x8000000000000000. > > Regards, > Kenji Noguchi
In your second example y is an instance of class X...not an int. y.v is an int. Are you hoping it will cast it to an int as needed using your method? If so, I think you need to do so explicitly...ie "%08x" % int(y) ~Sean -- http://mail.python.org/mailman/listinfo/python-list