如何在python中通过引用调用静态方法

How to call static method by reference in python

本问题已经有最佳答案,请猛点这里访问。

请看下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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()i get语句执行的异常:

1
2
3
4
5
6
7
<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显然包含一个参考的静态方法。但我不能调用此方法。为什么?我需要做什么改变,为了调用这个方法?


为了从类内部调用静态方法,需要将其解包。把m()改成m.__func__('params')就好了。