Function mistaken for a method

bruno at modulix onurb at xiludom.gro
Thu Jun 1 14:27:05 CEST 2006

Peter Otten wrote:
> Eric Brunel wrote:
>>My actual question is: why does it work in one case and not in the other?
>>As I see it, int is just a function with one parameter, and the lambda is
>>just another one. So why does the first work, and not the second? What
>>'black magic' takes place so that int is not mistaken for a method in the
>>first case?
> A python-coded function has a __get__ attribute, a C-function doesn't.
> Therefore C1.f performs just the normal attribute lookup while C2.f also
> triggers the f.__get__(C2(), C2) call via the descriptor protocol which
> happens to return a bound method.


class Obj(object):
  def __new__(cls, val, *args, **kw):
    print "in Obj.__new__"
    print "- called with :"
    print "  cls :", cls
    print "  val :", val
    print "  args:", str(args)
    print "  kw  :", kw
    obj = object.__new__(cls, *args, **kw)
    print "got : %s - %s" % (obj, dir(obj))
    return obj

class CPlus(C):
  f = Obj

> Peter

bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb at xiludom.gro'.split('@')])"

More information about the Python-list mailing list