In a dynamic language, why % operator asks user for type info?

Duncan Booth duncan.booth at invalid.invalid
Wed Jul 18 09:39:39 CEST 2007


Asun Friere <afriere at yahoo.co.uk> wrote:

> On Jul 17, 5:38 pm, Duncan Booth <duncan.bo... at invalid.invalid> wrote:
> 
>> indeed anything which has an __int__ method may be
>> passed to the %d formatter:
> 
> Anything?! Sorry to be persnickety here, but what about this:
> 
> class C :
>   def __int__ (self) : pass
> 
> '%d' % C()
> 
__int__ is a reserved method name so it is reasonable to assume that any 
such method will act as documented: "Should return a value of the 
appropriate type." If you choose to ignore the documentation then expect 
exceptions to be thrown.

> or this:
> 
> def foo (val) : return val
> foo.__int__ = lambda x=42 : int(x)
> 
> '%d' % foo('spam')
> 

I don't see any methods named '__int__' there, just a function assigned to 
an attribute. (Yes, I know that isn't the problem, assigning a function to 
an __int__ attribute works for other types, but if you can be silly so can 
I.)



More information about the Python-list mailing list