In the interest of reusing some existing code that was defined as an instance method of a different class, I was tying to do something like the following:
cl
This is an old question, but Python has evolved and looks like it's worth pointing it out:
with Python 3 there's no more , since an unbound method is simply a !
Which probably means the code in the original question should not be considered /that/ off. Python has always been about duck typing in any case, hasn't it?!
Note that there's also an alternative solution to the "explorative" question (see Python: Bind an Unbound Method?):
In [6]: a = A.a.im_func.__get__(B(), B)
In [7]: a
Out[7]: >
In [8]: a(2)
2
Ref:
In [1]: class A():
def a(self, a=0):
print a
...:
In [2]: A.a
Out[2]:
In [3]: A.a.im_func
Out[3]:
In [4]: A.a(B())
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 A.a(B())
TypeError: unbound method a() must be called with A instance as first argument (got B instance instead)
In [2]: class A():
def a(self, a=0):
print(a)
...:
In [3]: def a():
...: pass
...:
In [4]: class B():
...: pass
In [5]: A.a(B())
0
In [6]: A.a
Out[6]: