给出以下模拟静态方法的代码:
class StaticMethod(object):
"Emulate PyStaticMethod_Type() in Objects/funcobject.c"
def __init__(self, f):
self.f = f
def __get__(self, obj, objtype=None):
print('getting')
return self.f
class A:
def func2():
print('hello')
func2 = StaticMethod(func2)
当我打电话时:A.func2
我得到了我所期望的:
getting
<function __main__.A.func2>
[当我打电话时:A.func2()
我得到:
getting
hello
这是否意味着当您每次调用Descriptor Decorator方法时,Python首先会从Descriptor的__get__
方法中检索它?
如果是,那么实际上如何调用该方法?到底发生了什么?
这是否意味着当您每次调用Dedecor Decorator方法时,Python首先会从Descriptor的get方法中检索它?
当访问其类的类属性为描述符的对象的属性时,该对象将调用__get__
并返回结果。
“描述符装饰器”并不是真正的东西,使用装饰器设置描述符的事实与它的功能无关。
如果是,那么实际上如何调用该方法?到底发生了什么?
[如果您的意思是用staticmethod
装饰的基础函数,则每次调用该方法时都会调用该方法,描述符/ staticmethod
本身并没有规定,它只是返回该函数。