如何通过引用调用静态方法?
How to call static method by reference?
请看下面的例子:
class MyClass(object):
@staticmethod
def __myStaticMethod(someArgs):
pass
MY_SPECIAL_METHOD_LIST = [
__myStaticMethod
]
@staticmethod
def someOtherMethod():
m = MyClass.MY_SPECIAL_METHOD_LIST[0]
print(m)
m()
如果我现在执行语句 MyClass.someOtherMethod()
我得到一个异常:
<staticmethod object at 0x7fd672e69898>
Traceback (most recent call last):
File "./test3.py", line 25, in <module>
MyClass.someOtherMethod()
File "./test3.py", line 21, in someOtherMethod
m()
TypeError: 'staticmethod' object is not callable
显然 m
包含对静态方法的引用。但是我不能调用这个方法。为什么?我需要更改什么才能调用此方法?
为了从您的 class 内部调用静态方法,您需要将其解包。将 m()
更改为 m.__func__('params')
就可以了。
请看下面的例子:
class MyClass(object):
@staticmethod
def __myStaticMethod(someArgs):
pass
MY_SPECIAL_METHOD_LIST = [
__myStaticMethod
]
@staticmethod
def someOtherMethod():
m = MyClass.MY_SPECIAL_METHOD_LIST[0]
print(m)
m()
如果我现在执行语句 MyClass.someOtherMethod()
我得到一个异常:
<staticmethod object at 0x7fd672e69898>
Traceback (most recent call last):
File "./test3.py", line 25, in <module>
MyClass.someOtherMethod()
File "./test3.py", line 21, in someOtherMethod
m()
TypeError: 'staticmethod' object is not callable
显然 m
包含对静态方法的引用。但是我不能调用这个方法。为什么?我需要更改什么才能调用此方法?
为了从您的 class 内部调用静态方法,您需要将其解包。将 m()
更改为 m.__func__('params')
就可以了。