我有以下代码:
class SomeClass: @classmethod def func1(cls,arg1): #---Do Something--- @classmethod def func2(cls,arg1): #---Do Something--- # A 'function map' that has function name as its keys and the above function # objects as values func_map={'func1':func1,'func2':func2} @classmethod def func3(cls,arg1): # following is a dict(created by reading a config file) that # contains func names as keys and boolean as values that tells # the program whether or not to run that function global funcList for func in funcList: if funcList[func]==True: cls.func_map[func](arg1) #TROUBLING PART!!! if _name__='main' SomeClass.func3('Argumentus-Primus')
运行此命令时,我不断收到错误消息:
异常TypeError:“'classmethod'对象不可调用”
我无法弄清楚这是怎么回事,不胜感激。
在定义了类之前,您无法创建对类方法的引用。您必须将其移出类定义。但是,使用全局函数映射来确定要执行的操作确实很尴尬。如果您描述了您要对此进行的操作,我们可能会建议一个更好的解决方案。
class SomeClass(object): @classmethod def func1(cls, arg1): print("Called func1({})".format(arg1)) @classmethod def func2(cls, arg1): print("Call func2({})".format(arg1)) @classmethod def func3(cls, arg1): for fnName,do in funcList.iteritems(): if do: try: cls.func_map[fnName](arg1) except KeyError: print("Don't know function '{}'".format(fnName)) # can't create function map until class has been created SomeClass.func_map = { 'func1': SomeClass.func1, 'func2': SomeClass.func2 } if __name__=='__main__': funcList = {'func1':True, 'func2':False} SomeClass.func3('Argumentus-Primus')