# function which takes class type as the first argument
# it will be injected as static method to classes below
def _AnyClass_me(Class,*args,**kw):
print Class,str(args),str(kw)
# a number of classes
class Class1: pass
class Class2: pass
# iterate over class where should be the method injected
# c is bound via default arg (lambda in loop)
# all arguments to the static method should be passed to _AnyClass_me
# via *args and **kw (which is the problem, see below)
for c in (Class1,Class2):
c.me=staticmethod(lambda Class=c,*args,**kw:_AnyClass_me(Class,*args,**kw))
# these are OK
Class1.me() # work on class itself
Class2().me() # works on instance as well
# fails to pass the first (Class) arg to _anyClass_me correctly
# the 123 is passed as the first arg instead, and Class not at all
Class1.me(123)
Class2().me(123)
IyBmdW5jdGlvbiB3aGljaCB0YWtlcyBjbGFzcyB0eXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVudAojIGl0IHdpbGwgYmUgaW5qZWN0ZWQgYXMgc3RhdGljIG1ldGhvZCB0byBjbGFzc2VzIGJlbG93CmRlZiBfQW55Q2xhc3NfbWUoQ2xhc3MsKmFyZ3MsKiprdyk6CiAgICBwcmludCBDbGFzcyxzdHIoYXJncyksc3RyKGt3KQoJIAogIyBhIG51bWJlciBvZiBjbGFzc2VzCmNsYXNzIENsYXNzMTogcGFzcwpjbGFzcyBDbGFzczI6IHBhc3MKCiMgaXRlcmF0ZSBvdmVyIGNsYXNzIHdoZXJlIHNob3VsZCBiZSB0aGUgbWV0aG9kIGluamVjdGVkCiMgYyBpcyBib3VuZCB2aWEgZGVmYXVsdCBhcmcgKGxhbWJkYSBpbiBsb29wKQojIGFsbCBhcmd1bWVudHMgdG8gdGhlIHN0YXRpYyBtZXRob2Qgc2hvdWxkIGJlIHBhc3NlZCB0byBfQW55Q2xhc3NfbWUKIyB2aWEgKmFyZ3MgYW5kICoqa3cgKHdoaWNoIGlzIHRoZSBwcm9ibGVtLCBzZWUgYmVsb3cpCmZvciBjIGluIChDbGFzczEsQ2xhc3MyKToKICAgIGMubWU9c3RhdGljbWV0aG9kKGxhbWJkYSBDbGFzcz1jLCphcmdzLCoqa3c6X0FueUNsYXNzX21lKENsYXNzLCphcmdzLCoqa3cpKQoKIyB0aGVzZSBhcmUgT0sKQ2xhc3MxLm1lKCkgICAgIyB3b3JrIG9uIGNsYXNzIGl0c2VsZgpDbGFzczIoKS5tZSgpICAjIHdvcmtzIG9uIGluc3RhbmNlIGFzIHdlbGwKCiMgZmFpbHMgdG8gcGFzcyB0aGUgZmlyc3QgKENsYXNzKSBhcmcgdG8gX2FueUNsYXNzX21lIGNvcnJlY3RseQojIHRoZSAxMjMgaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmcgaW5zdGVhZCwgYW5kIENsYXNzIG5vdCBhdCBhbGwKQ2xhc3MxLm1lKDEyMykKQ2xhc3MyKCkubWUoMTIzKQo=