我有几个类需要注入静态方法;这个静态方法应该以类型(而不是实例)作为第一个参数来调用,并将所有剩余的参数传递给实现(ideone 的示例):
# 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)
输出是(前两行正确,另外两行不正确):
__main__.Class1 () {}
__main__.Class2 () {}
123 () {}
123 () {}
我怀疑 lambda 行存在问题,与默认参数混合使用,*args
但我无法对其进行排序。
在存在其他参数的情况下,如何正确传递 Class 对象?