Adding functions to classes after definition

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Gerard Brunick

    #1

    Adding functions to classes after definition

    Consider: A)
    >>class C(object):
    .... pass
    ....
    >>def f(*args):
    .... print args
    ....
    >>C.f = f
    >>C.f
    <unbound method C.f>
    >>c=C()
    >>c.f()
    (<__main__.C object at 0x04A51170>,)

    And B)
    >>del c
    >>C.f = types.MethodTyp e(f, None, C)
    >>C.f
    <unbound method C.f>
    >>c = C()
    >>c.f()
    (<__main__.C object at 0x04A51290>,)

    I don't understand A). It is my vague understanding, that methods are
    really properties that handle binding on attribute access, so B) should
    be the "right" way to add a method to a class after definition. Why does
    A show up as a method? Shouldn't it still just be a function? Certainly
    when you define a class, there is some magic in the __new__ method that
    turns functions in the initial dictionary into methods, but does this still
    happen for all setattr after that? Is is possible to set a class attribute
    equal to a regular (types.Function Type) function?

    Any references that discuss these issues would be greatly appreciated.

    Thanks,
    Gerard
Working...