Учитывая следующий код, который эмулирует статический метод:
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 сначала получает его из метода __get__
дескриптора?
Если да, то как тогда метод на самом деле вызывается? Что именно происходит под капотом?