gpt4 book ai didi

python - staticmethod 和 classmethod 装饰器可以用纯 Python 实现吗?

转载 作者:太空狗 更新时间:2023-10-29 20:16:02 25 4
gpt4 key购买 nike

这是一个学术问题,而不是一个实际问题。我正在尝试深入研究 Python 的基础,我想知道:如果我愿意,我可以在纯 Python 中实现 staticmethodclassmethod 装饰器吗?

对于 staticmethod,也许我可以保留对原始函数的引用并在调用它时省略第一个参数?

对于 classmethod,也许我可以保留对原始函数的引用并调用它传递第一个参数的类型,而不是参数本身? (我如何处理直接在类里面调用它?)

同样,我并不是想在我的程序中实际实现它;我想从中学习语言的工作原理。如果可以的话,我真的很感激代码示例。如果没有,我将不胜感激解释为什么它不能在理论上完成。谢谢!

编辑:感谢您的回答和对描述符协议(protocol)的引用!为了进一步扩展我对 Python 的理解,我想再问两件事:

  • 这是否可以在没有描述符协议(protocol)的情况下完成,例如通过在我们的类中实现 __ call __ 特殊方法?

  • 描述符协议(protocol)在 Python 2.7 和 Python 3.x 中的工作方式是否相同?

再次感谢!

最佳答案

the docs中有例子:

class StaticMethod(object):
"Emulate PyStaticMethod_Type() in Objects/funcobject.c"

def __init__(self, f):
self.f = f

def __get__(self, obj, objtype=None):
return self.f

和:

class ClassMethod(object):
"Emulate PyClassMethod_Type() in Objects/funcobject.c"

def __init__(self, f):
self.f = f

def __get__(self, obj, klass=None):
if klass is None:
klass = type(obj)
def newfunc(*args):
return self.f(klass, *args)
return newfunc

关于python - staticmethod 和 classmethod 装饰器可以用纯 Python 实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com