<build-in function> incompatible with <function>

James Stroud jstroud at ucla.edu
Mon Jan 30 20:14:40 EST 2006


Luke wrote:
> Built-in functions don't bind to classes like regular functions.  Is
> this intended?  (I do notice that the Python Reference Manual sec 3.2
> under "Class Instance" refers to a "user-defined function").  Any ideas
> what the reason is for this distinction between build-in functions and
> normal functions?
> 
> It's rather inconvenient when implementing some methods (not the whole
> class) in a C extension :-(
> 
> $ python
> Python 2.4.2 (#1, Nov  3 2005, 12:41:57)
> [GCC 3.4.3-20050110 (Gentoo Linux 3.4.3.20050110, ssp-3.4.3.20050110-0,
> pie-8.7 on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> 
>>>>def normal_func(x):
> 
> ...   return x
> ...
> 
>>>>class foo(object):
> 
> ...   a = normal_func
> ...   b = lambda x : x
> ...   c = abs
> ...
> 
>>>>obj = foo()
>>>>obj.a
> 
> <bound method foo.normal_func of <__main__.foo object at 0xb7c3766c>>
> 
>>>>obj.b
> 
> <bound method foo.<lambda> of <__main__.foo object at 0xb7c3766c>>
> 
>>>>obj.c
> 
> <built-in function abs>
> 

py> import types
py> def doit(x):
...   print x
...
py> class bob:
...   pass
...
py> b = bob
py> b.x = types.MethodType(doit, b)
py> b.x
<bound method ?.doit of <class __main__.bob at 0x403d8b3c>>
py> b.x()
__main__.bob



More information about the Python-list mailing list