【发布时间】:2015-11-02 03:50:53
【问题描述】:
首先,我了解装饰器的工作原理。我知道@staticmethod 去掉了签名中的实例参数,使得
class C(object):
@staticmethod
def foo():
print 'foo'
C.foo //<function foo at 0x10efd4050>
C().foo //<function foo at 0x10efd4050>
有效。
但是,我不明白 staticmethod 的源代码是如何做到这一点的。
在我看来,当在 staticmethod 中包装方法 foo 时,staticmethod 的实例被实例化,然后 一些魔法 发生了,使 C.foo() 合法。
那么.. 那些魔法会发生什么? staticmethod 做了什么?
我知道关于staticmethods 的大量话题,但没有一个能解决我的疑虑。但也许我没有击中魔法关键字。如果是这样,请告诉我。
寻找staticmethod源代码的朋友请参考https://hg.python.org/cpython/file/c6880edaf6f3/Objects/funcobject.c
【问题讨论】:
标签: python decorator static-methods python-decorators python-internals